给定行索引和列索引如何设置稀疏矩阵的项?

时间:2013-11-28 10:27:43

标签: python numpy scipy sparse-matrix

假设我有一个列表列表,其中每个子列表包含要设置为1的连续行的列索引。

indices = [[1,43,243],[2,34,276],...]

我的目的是设置符合给定索引的scipy稀疏矩阵的值。

例如:

对于第一行1,43,243,列需要设置为1 对于第二行2,34,276,列需要设置为1

如果这是一个愚蠢的问题,对不起。我只是一个从Matlab过渡到scipy的初学者。

1 个答案:

答案 0 :(得分:0)

一些sparse矩阵类型将起作用。来自sparse.csr_matrix文档:http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html

>>> row = array([0,0,1,2,2,2])
>>> col = array([0,2,2,0,1,2])
>>> data = array([1,2,3,4,5,6])
>>> csr_matrix( (data,(row,col)), shape=(3,3) ).todense()
matrix([[1, 0, 2],
        [0, 0, 3],
        [4, 5, 6]])

coo_matrix也会接受此(data,(row,col))输入

Matlab提供了一种创建稀疏矩阵的类似方法,完成了有关添加重复条目的业务(请参阅coo_matrix文档底部的注释)。

我认为你想构建

row = array([0,0,0, 1,1,1,2,2,2,....])
col = array([1,43,243, 2,34,276,,...])  
# col = col-1 # to change to 0 based indexing?
data = array([1,1,1,...])

例如:

np.array(indices).ravel()
# array([  1,  43, 243,   2,  34, 276])
np.arange(2).repeat(3)
# array([0, 0, 0, 1, 1, 1])
np.ones(6)
# array([ 1.,  1.,  1.,  1.,  1.,  1.])