我在尝试为100x100 2d阵列分配特定值时遇到问题。除了沿着两段之外,我希望它在任何地方都是零:从第25行到第75行的第一行和从第25行到第75行的最后一行。
我尝试使用":循环",我的意思是:
my_array[0][25:75] = 1.
my_array[25:75][99] = 1.
但第二行返回错误:
IndexError: index 99 is out of bounds for axis 0 with size 50
好像是第一次切割长度为50(75-25)的数组,然后用它进行分配。
当然,我可以得到我想要的东西:
for x in xrange(25,75):
my_array[x][-1] = 1.
但是,出于好奇,我怎么能用:
操作完成它?
答案 0 :(得分:2)
将两个数组切片放在相同的方括号内。使问题变小,以便更容易显示:
>>> my_array = np.zeros((10,10))
>>> my_array[0, 2:7] = 1
>>> my_array[2:7, -1] = 1
>>> my_array
array([[ 0., 0., 1., 1., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[ 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.]])
现在发生的事情是你要求这个阵列的50行切片,然后[99]
试图获得的第99行,但只有50。