Pythonでnumpy.ix_ の使い方

1132 ワード

複数行の複数列に同時に値を割り当てるにはnumpyを使用する.ix_
import numpy as np
A=np.zeros((6,6))
print(A)

出力結果:
array([[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., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]])

現在、Aの3、4行目、1、2列目に6を同時に付与しています.
A[np.ix_([2,3],[0,1])]=6
print(A)

出力結果は
array([[0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.],
       [6., 6., 0., 0., 0., 0.],
       [6., 6., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]])

注意しなければならないのは
A[[2,3]][:,[0,1]]
#       read-only access(     ),          
#  
import numpy as np
A=np.zeros((5,5))
A[[2,3]][:,[0,1]]=6
print(A)

出力結果は
array([[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., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]])

Aの値は変わっていないことがわかります