如何在Python中手动创建稀疏矩阵
我有一个文本文件,其中包含表示稀疏矩阵的数据,格式如下:如何在Python中手动创建稀疏矩阵,python,numpy,matrix,Python,Numpy,Matrix,我有一个文本文件,其中包含表示稀疏矩阵的数据,格式如下: 0 234 345 0 236 0 345 365 465 0 12 35 379 数据用于分类任务,每一行都可以被视为一个特征向量。每行中的第一个值表示一个标签,其后的值表示各个要素的存在 我试图用这些值创建一个稀疏矩阵(用于scikit学习的机器学习任务)。我已经找到并阅读了,但我无法理解如何用这样的源数据增量构建稀疏矩阵 到目前为止,我找到的示例显示了如何获取稠密矩阵并将其转换,或者如何使用人为数据创建本机稀疏矩阵,但在这里没有
0 234 345
0 236
0 345 365 465
0 12 35 379
数据用于分类任务,每一行都可以被视为一个特征向量。每行中的第一个值表示一个标签,其后的值表示各个要素的存在
我试图用这些值创建一个稀疏矩阵(用于scikit学习的机器学习任务)。我已经找到并阅读了,但我无法理解如何用这样的源数据增量构建稀疏矩阵
到目前为止,我找到的示例显示了如何获取稠密矩阵并将其转换,或者如何使用人为数据创建本机稀疏矩阵,但在这里没有帮助我的示例。我确实发现了这个相关的SO问题(),但该示例假设您知道最大列数和行大小,而我不知道,因此数据类型似乎不合适
到目前为止,我有以下代码来阅读文档并将值解析为合理的内容:
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
所以问题是,
- 这里使用的适当稀疏矩阵类型是什么
- 我用我的代码朝着正确的方向前进了吗
非常感谢您的帮助。您可以使用
coo\u matrix()
:
以下是检查结果的代码:
np.where(m.toarray())
输出:
(array([0, 0, 1, 2, 2, 2, 3, 3, 3]),
array([234, 345, 236, 345, 365, 465, 12, 35, 379]))
我不理解格式,对于矩阵中的每个元素,都需要
行、
列和
值。
值信息在哪里?要以增量方式创建稀疏矩阵,可以使用:如果它需要一个值,那么它可以是1或True。这就清楚了吗?@HYRY hanks获得了关于dok_矩阵的提示,但我在初始化dok_矩阵时不还需要知道总列数吗?我的问题的一部分是,我不能可靠地知道最大COL值是多少。我可以编写一个脚本,找出给定数据文件的最大值,但我认为可能存在一些不需要我指定的现有scipy稀疏矩阵数据类型。
(array([0, 0, 1, 2, 2, 2, 3, 3, 3]),
array([234, 345, 236, 345, 365, 465, 12, 35, 379]))