对多行多列同时赋值可使用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的值并未改变