2016-04-26 48 views
2

我很新的蟒蛇和索引仍然对我来说很难。我正在尝试使用迭代操作来绘制一些值,但它似乎不起作用,并给了我上面的错误。请帮帮我。谢谢。IndexError:指数1000是出界对轴0的大小为1000

我的代码:

import numpy as np 
import matplotlib.pyplot as mp 

e = np.exp 
z = np.arange(1000) 


for i in z: 
    while True: 
    H_2 = 0.58*e(-(z[i]/81)**2) 
    i += 1 

mp.scatter(H_2 , z, c = 'r') 
mp.show() 
+2

索引是从零开始的。 – SevenBits

+4

你认为什么'而真:'呢? – Matthias

+0

我认为这是一个循环,所以它会再次回来检查它是否满足条件'如果我在z的范围内'。 – cat

回答

1

此行是给你的错误i += 1

如果您计划使用while循环,不要忘记添加break语句,否则你会陷入无限循环。没有任何额外的细节,我不明白为什么在这种情况下是必要的。

除此之外,我会定义H_2为空列表,并在你的计算将其追加任何值。根据documentationH_2需要是一个类似数组的值。

因此,它应该是这样的:

import numpy as np 
import matplotlib.pyplot as mp 

e = np.exp 
z = np.arange(1000) 
H_2 = [] 

for i in z: 
    H_2.append(0.58*e(-(i/81)**2)) 

mp.scatter(H_2 , z, c = 'r') 
mp.show() 

如预期出现希望的图形。

+0

'Z [I]'中的主体中的for循环应该可能只是'H_2 =是'i' – Hamms

+0

替代地,[( - (I/81)** 2)0.58 * E为i的Z]' – Hamms

+1

您关于'z [i]'只是'我'感谢你指出了这一点。我也认为使用列表理解将是一个更好的方法,但您提到,但OP是python的新手,所以我只是将它保留原样。 @Hamms – freshhmints

1

所以只是作为一般底漆,你需要记住,索引从零开始的索引。所以如果你有一个由5个元素组成的数组,索引0将得到你的第一个元素,等等,索引4将得到你的第5个元素和最后一个元素。这就是说索引5因此试图访问第6个元素,因此是无效的。

现在到Python,你应该知道的是,“在名单X”的语句将通过在失去了所有的元素进行迭代,将实际值,而不是索引变量x。

+0

感谢@karina提供有用的评论。 – cat

相关问题