在 python 中使用高级索引修改稀疏矩阵
modifying sparse matrix using advanced indexing in python
我正在尝试使用高级索引修改大型稀疏矩阵。假设您有以下代码:
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
对于 idx = [1,4]
、A[idx, idx]
returns 形状为 (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
我正在尝试使用高级索引修改大型稀疏矩阵。假设您有以下代码:
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
对于 idx = [1,4]
、A[idx, idx]
returns 形状为 (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