2016-04-26 30 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

相關問題