我尝试使用高级索引修改大型稀疏矩阵。假设您有以下代码:
import numpy as np
import scipy.sparse as sp
A = sp.lil_matrix((10, 10))
a = np.array([[1,2],[3,4]])
idx = [1,4]
A[idx, idx] += a
为什么这段代码不起作用?它给了我错误
ValueError: shape mismatch in assignment
答案 0 :(得分:2)
对于idx = [1,4]
,A[idx, idx]
会返回形状为(1,2)
的稀疏矩阵,其中包含元素A[1,1]
和A[4,4]
。但是,a
的形状为(2,2)
。因此,形状不匹配。如果您想将A[1,1]
,A[1,4]
,A[4,1]
和A[4,4]
分配给a
,您应该这样做:
import numpy as np
import scipy.sparse as sp
A = sp.lil_matrix((10, 10))
a = np.array([[1,2],[3,4]])
idx = np.array([1,4])
A[idx[:, np.newaxis], idx] += a # use broadcasting