2016-09-17 51 views
0

我的主要目標是打印出一個變量的值在雙精度型for loopif-statement之下,但是我傾向於得到一個誤差IndexError: invalid index to scalar variable.這裏我的代碼IndexError:對於雙精度變量的無效索引以及if'for'語句

import numpy as np 

nR = 133 
nP = 255 
Pmin = 0.09 
Pmax = 20.0 
dTime = 0.005 

g = np.zeros((nR+1, nP+1), dtype=np.float64) 
E01 = np.zeros(nR+1) 
LnP = np.zeros(nP+1) 


n = nR - 1 
l = nP - 1 

LnPmax = np.log(Pmax) 
LnPmin = np.log(Pmin) 
dLnP = (LnPmax - LnPmin)/(l-1) 
odt = 1/dTime 

for i in range(1, n): 
    T1 = E01[i]*dTime 
    for k in range(1, l): 
     LnPa = T1 + LnP[k] 
     ka = int((LnPa - LnPmin)/dLnP + 1) 
     if LnPa <= LnPmin: 
      ha = 0.0 
     elif LnPa >= LnPmax: 
      ha = 0.0 
     else: 
      ha = g[i][ka] + (g[i][ka+1] - g[i][ka])*(LnPa - LnPa[ka])/dLnP 
      print ha 

每當我試圖print ha我得到一個錯誤IndexError: invalid index to scalar variable,我擡起頭,其他的解決方案上stackoverflowgoogle但它是無濟於事也許有人可以幫助我,我會感謝:)

+0

您發佈的代碼有不好的縮進 - 'for範圍(1,n):'後面的行應縮進以使它們成爲for循環的一部分。糾正你的縮進,然後回到我們身邊。 –

+0

沒錯,縮進似乎是一個問題,列表/數組「LnP」未定義「第24行」。 –

+0

我已經修好了縮進,所以現在應該沒問題@RoryDaulton, – Tonikami04

回答

0

在您的下一個到最後一行,你有子表達式

LnPa - LnPa[ka] 

,首先參考LnPa是好的,因爲這是一個浮點變量,但第二個不是。您試圖將該浮點變量作爲列表或LnPa[ka],通過使用ka索引它來處理。我不知道你打算做什麼(你真的需要添加評論,並使你的變量名稱更具描述性),所以我不能推薦一個特定的更正。但不知何故擺脫LnPa[ka]

另外,最後一行print ha在python 3.x中不起作用。如果將其替換爲

print(ha) 

它可以在任何版本的python中工作。

+0

非常感謝@Rory,當我碰巧把LnPa [ka]'轉換成浮動狀態時,它現在工作了 – Tonikami04

+0

在這個網站上,通過upvoting所有有用的答案。您可以通過點擊答案左上角的向上箭頭來實現。另外,通過單擊答案左上角的複選標記來接受最佳答案。這比在評論中表示感謝要好。 –

相關問題