2

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

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

4

2 回答 2

1

好吧,我不确定您打算如何从该代码中获取输出(也许您可以进一步解释您的尝试),代码最后一行的问题很简单。

您制作了一个形状为 (r, index[r]) 的数组,但请记住索引从 0 开始。因此将最后一行更改为

p[r-1, index[r]-1] = i+(j-1)*dy
于 2013-05-04T23:45:31.573 回答
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]]会导致异常。因此,也许您想将值附加到数组中,而不是分配给不存在的位置。

于 2013-05-05T00:33:04.353 回答