在python中使用高级索引修改稀疏矩阵

时间:2016-07-01 14:32:27

标签: python numpy scipy matrix-indexing

我尝试使用高级索引修改大型稀疏矩阵。假设您有以下代码:

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

1 个答案:

答案 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