python - 从列表列表中创建每个唯一值的二进制矩阵
问题描述
这个问题在概念上类似于这里的问题: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
解决方案
使用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)
出于内存原因,您可能希望将其保留为稀疏矩阵。
推荐阅读
- python - pip install terraform_utils 失败
- laravel-7 - 发现意外数据。尾随数据 Laravel 7
- random - 我怎么能随机移动这个三角形?p5.js
- css - 在 CSS 中,如何创建一个类以将填充放在带下划线的标题下方?
- java - 无法在 RestTemplate 中提取响应
- javascript - 将 Setter 函数传递给子组件时的单元测试 UseState
- windows - 在循环批处理文件中使用 CSV 变量
- rust - 写!引用时宏不会在单独的方法中编译
- continuous-integration - 用户如何从上游管道触发运行 GitLab 下游管道,而没有运行下游管道的权限
- wkwebview - WKWebView 仅更改特定 URL 的用户代理