将值分配给numpy数组中的块

时间:2017-06-04 18:41:42

标签: arrays numpy

我试图通过插入粘贴另一个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))

我做错了什么? 谢谢

1 个答案:

答案 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.]])