1
別の2次元配列を貼り付けて挿入することによって、2次元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[0:2,:][:,0:2]=np.zeros((2,2))
でライン
M[S,:][:,S]=np.zeros((2,2))
を交換する場合、私は期待される動作を取得しますか? あなたが
高度なインデックスをnumpyの使用することができますありがとうございました。 – user2357112
'M [S、:]'はコピーを作成します。 'M [0:2、:]'ビュー。 – hpaulj