在 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