这是因为a[indice,:][:,indice]
不是数组的视图,而是一个单独的副本 -
In [142]: np.may_share_memory(a, a[indice,:][:,indice])
Out[142]: False
为了解决这个问题,我们可以使用np.ix_ https://docs.scipy.org/doc/numpy/reference/generated/numpy.ix_.html -
a[np.ix_(indice, indice)] = b
验证结果 -
In [145]: a
Out[145]:
matrix([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
In [146]: b
Out[146]:
matrix([[ 4., 7.],
[ 0., 9.]])
In [147]: a[np.ix_(indice, indice)] = b
In [148]: a
Out[148]:
matrix([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 4., 7., 0.],
[ 0., 0., 0., 9., 0.],
[ 0., 0., 0., 0., 0.]])
In [149]: a[indice,:][:,indice]
Out[149]:
matrix([[ 4., 7.],
[ 0., 9.]])