代码之家  ›  专栏  ›  技术社区  ›  Jack Arnestad

从列表列表中创建每个唯一值的二进制矩阵

  •  1
  • Jack Arnestad  · 技术社区  · 7 年前

    这个问题在概念上与这里的问题相似: Python Pandas: How to create a binary matrix from column of lists? ,但由于数据的大小,我不想转换为pandas数据帧。

    我有如下清单,

    list_ = [[5, 3, 5, 2], [6, 3, 2, 1, 3], [5, 3, 2, 5, 2]]
    

    我想要一个二进制矩阵,每个唯一的值作为一列,每个子列表作为一行。

    如何在超过100000个子列表上有效地完成这项工作,每个子列表大约有1000个条目?

    编辑:

    示例输出与上面链接的问题中的输出类似,其中的列表基本上可以被视为:

    list_ = [["a", "b"], ["c"], ["d"], ["e"]]
    
       a  b  c  d  e
    0  1  1  0  0  0
    1  0  0  1  0  0
    2  0  0  0  1  0
    3  0  0  0  0  1
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   phi    7 年前

    使用 sklearn CountVectorizer

    from sklearn.feature_extraction.text import CountVectorizer
    cv = CountVectorizer(tokenizer=lambda x: x, lowercase=False)
    m = cv.fit_transform(list_)
    
    # To transform to dense matrix
    m.todense()
    
    # To get the values correspond to each column
    cv.get_feature_names()
    
    # If you need dummy columns, not count
    m = (m > 0)
    

    出于内存原因,您可能希望将其保留为备用矩阵。