我试图通过插入粘贴另一个2-dim数组来更改二维numpy数组中的块。下面的示例给出了我意想不到的行为:
import numpy as np
M=np.ones((4,4))
print(M)
S=[0,1]
print('to be set to zero: ',M[S,:][:,S])
M[S,:][:,S]=np.zeros((2,2))
print('after setting to zero: ',M)
我希望M的左上角变为零。但是我得到了
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
to be set to zero: [[ 1. 1.]
[ 1. 1.]]
after setting to zero: [[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
似乎我可以提取左上方的块而不是写入它。如果我替换行
,我会得到预期的行为M[S,:][:,S]=np.zeros((2,2))
与
M[0:2,:][:,0:2]=np.zeros((2,2))
我做错了什么? 谢谢
答案 0 :(得分:2)
您可以使用numpy高级索引ix_
M[np.ix_(S,S)]=0
M
Out[622]:
array([[ 0., 0., 1., 1.],
[ 0., 0., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])