1
我试图通过插入粘贴另一个2-dim数组来更改二维numpy数组内的块。下面的示例给了我意想不到的行为:将值分配给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))
我在做什么错? 谢谢
你在副本上设置的条目。 – user2357112
'M [S,:]'创建一个副本; 'M [0:2,:]'一种看法。 – hpaulj