csr矩阵不支持赋值的花式索引

时间:2014-02-18 03:22:26

标签: python scipy sparse-matrix

如何有效地分配到csr_matrix中的行?

这给出了错误:

Q[mid, :] = new_Q

Qcsr_matrix,而new_QQ.getrow(i)的结果。

我正在使用最新版本的scipy。

我使用的是正确的矩阵类型吗?

我想为我正在使用的两个矩阵找到正确的矩阵类型:QB。 我一次修改一个矩阵Q,并一次修改一个。我似乎应该将Q创建为lil_matrixcsr_matrixB应该是什么类型的矩阵?一个csc_matrix

1 个答案:

答案 0 :(得分:0)

它似乎在13.2中运行良好:

>>> sp.__version__
'0.13.2'
>>> import scipy.sparse as sps
>>> a = sps.csr_matrix(np.arange(25).reshape(5, 5))
>>> a.A
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
>>> a[3] = a.getrow(0)
>>> a.A
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [ 0,  1,  2,  3,  4],
       [20, 21, 22, 23, 24]])

至于你的第二个问题的答案,这取决于你是否正在改变行(列)的稀疏模式。如果你不是,那么是,CSR为行,CSC为列。但是,如果你是,那么CSR和CSC将会挣扎,因为每一行(列)更新都需要每次都复制整个矩阵的数据。在后一种情况下,您可能希望尝试对QB矩阵使用LIL,但可以使用B.T以便访问行。