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

Python 从列表列表中创建每个唯一值的二进制矩阵,python,python-3.x,numpy,Python,Python 3.x,Numpy,这个问题在概念上类似于这里的问题:,但是由于我的数据的大小,我不想转换成熊猫数据帧 我有一个列表,如下所示 list_ = [[5, 3, 5, 2], [6, 3, 2, 1, 3], [5, 3, 2, 5, 2]] 我想要一个二进制矩阵,每个唯一值作为一列,每个子列表作为一行 如何在100000多个子列表(每个子列表大约有1000项)上有效地执行此操作 编辑: 示例输出类似于上面链接的问题中的输出,其中列表基本上可以被视为: list_ = [["a", "b"], ["c"], ["d

这个问题在概念上类似于这里的问题:,但是由于我的数据的大小,我不想转换成熊猫数据帧

我有一个列表,如下所示

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

使用
sklearn
countvectorier

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)

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

这里的列表不完整。你能解释一下你的输出应该是什么样子吗?总共有多少个唯一的值?在最坏的情况下,将有
10**8
唯一值,导致矩阵中出现
10**13
条目,因此您最好有几TB的内存来适应矩阵。更重要的是,为什么首先要将数据转换为内存效率较低的表示形式?请提供有关您正在解决的问题的更多上下文。@SvenMarnach我想对每个功能(数字)进行Fisher精确测试,并将其用作功能选择方法。我还有一个列表,每个子列表都有一个分类赋值。也许最好是迭代。如果您能就此提供一些见解,我们将不胜感激。