如何有效地分配到csr_matrix
中的行?
这给出了错误:
Q[mid, :] = new_Q
Q
是csr_matrix
,而new_Q
是Q.getrow(i)
的结果。
我正在使用最新版本的scipy。
我使用的是正确的矩阵类型吗?
我想为我正在使用的两个矩阵找到正确的矩阵类型:Q
和B
。
我一次修改一个行矩阵Q,并一次修改一个列。我似乎应该将Q
创建为lil_matrix
或csr_matrix
。 B
应该是什么类型的矩阵?一个csc_matrix
?
答案 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将会挣扎,因为每一行(列)更新都需要每次都复制整个矩阵的数据。在后一种情况下,您可能希望尝试对Q
和B
矩阵使用LIL,但可以使用B.T
以便访问行。