numpy数组索引说超出范围

时间:2013-05-04 23:26:29

标签: python numpy

我认为我在数组索引的代码的最后一行做错了。我希望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

有人可以指出我做错了什么吗?谢谢。

2 个答案:

答案 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]]引起的异常。因此,您可能希望将值附加到数组,而不是分配给不存在的位置。