Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中手动创建稀疏矩阵_Python_Numpy_Matrix - Fatal编程技术网

如何在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]))