【发布时间】:2015-01-12 12:09:24
【问题描述】:
我有一个文本文件,其中包含表示具有以下格式的稀疏矩阵的数据:
0 234 345
0 236
0 345 365 465
0 12 35 379
数据用于分类任务,每一行都可以被认为是一个特征向量。每行中的第一个值代表一个标签,其后的值代表单个特征的存在。
我正在尝试使用这些值创建一个稀疏矩阵(用于 scikit learn 的机器学习任务)。我已经找到并阅读了scipy.sparse documentation,但我无法理解如何使用这样的源数据逐步构建稀疏矩阵。
到目前为止,我发现的示例展示了如何获取密集矩阵并对其进行转换,或者如何使用人为的数据创建原生稀疏矩阵,但这里没有任何示例对我有帮助。我确实找到了这个相关的 SO 问题 (Building and updating a sparse matrix in python using scipy),但该示例假设您知道最大 COL、ROW 大小,而我不知道,因此数据类型似乎不合适。
到目前为止,我有以下代码来读取文档并将值解析为看起来合理的内容:
def get_sparse_matrix():
matrix = []
with open("data.dat", 'r') as f:
for i, line in enumerate(f):
row = line.strip().split()
label = row[0]
features = entry[1:]
matrix.append([(i, col) for col in features])
sparse_matrix = #magic happens here
return sparse_matrix
所以问题是,
- 什么是合适的稀疏矩阵类型?
- 我的代码是否朝着正确的方向前进?
非常感谢任何帮助。
【问题讨论】:
-
我不懂格式,对于矩阵中的每个元素,你需要
row,col, andvalue. Where is thevalue`信息吗?要增量创建稀疏矩阵,可以使用:docs.scipy.org/doc/scipy-0.14.0/reference/generated/… -
如果它需要有一个值,那么它可以是 1 或 True。这说明清楚了吗?
-
@HYRY 了解 dok_matrix 的提示,但我在初始化 dok_matrix 时是否还需要知道总列数?我的部分问题是我不能可靠地知道最大 COL 值是多少。我可以编写一个脚本来找出给定数据文件的最大值,但认为可能存在一些不需要我指定的现有 scipy 稀疏矩阵数据类型。