首页 > 解决方案 > 从列表列表中创建每个唯一值的二进制矩阵

问题描述

这个问题在概念上类似于这里的问题:Python Pandas: How to create a binary matrix from column of lists?,但由于我的数据大小,我不想转换成熊猫数据框。

我有一个列表,如下所示,

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

标签: pythonpython-3.xnumpy

解决方案


使用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)

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


推荐阅读