我认为我在数组索引的代码的最后一行做错了。我希望p的输出像这样 -
array([[ 0, 0, 0],
[ 0, 0, 0],
[44, 0, 0],
[45, 55, 0],
[46, 56, 0],
[47, 57, 0],
[48, 58, 0],
[39, 49, 59],
[40, 50, 60]])
这是代码 -
import numpy as np
dx = 8
dy = 10
bx = 5.34
by = 1.09
index = np.zeros((dx+dy),dtype = 'int32')
for i in np.arange(1,dy+1):
for j in np.arange (1,dx+1):
if i-by > 0:
theta = 180*np.arctan(abs(j-bx)/(i-by))/np.pi
if theta<10:
r = np.around(np.sqrt((j-bx)**2+(i-by)**2))
if r>0:
index[r]+=1
p = np.zeros((r,index[r]),dtype = 'int32')
p[r,index[r]] = i+(j-1)*dy
有人可以指出我做错了什么吗?谢谢。
答案 0 :(得分:1)
嗯,我不确定你打算如何从该代码获取输出(也许你可以进一步解释你的尝试),代码最后一行的问题很简单。
你创建一个具有形状(r,index [r])的数组,但请记住,索引从0开始。因此将最后一行更改为
p[r-1, index[r]-1] = i+(j-1)*dy
答案 1 :(得分:1)
运行代码后,您可以看到解释器中的对象:
>>> p
array([[0],
[0],
[0]])
>>> (r, index[r])
(3.0, 1)
>>> p[3.0, 1]
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
p[3.0, 1]
IndexError: index 3 is out of bounds for axis 0 with size 3
根据这些信息,您可以看到变量的分配方式是由数组访问p [r,index [r]]引起的异常。因此,您可能希望将值附加到数组,而不是分配给不存在的位置。