2015-05-27 27 views
-1

此代碼表明我下面的錯誤,不知道爲什麼: 回溯(最近最後一次通話): 文件「testSolver.py」,第24行,在 S [記者:J + NFM [I]:] = S [I]/2.0 類型錯誤:列表索引必須爲整數,片工作時無法元組Python的類型錯誤與元組和整數

import numpy as np 
mu = np.array([ -0.8611363115, -0.3399810435, 0.3399810435, 0.8611363115 ]) 
wt = np.array([ 0.3478548451, 0.6521451549, 0.6521451549, 0.3478548451 ]) 
NCM = [0.0,1.0,2.0,3.0] 
NFM = [3,4,5] 
mt = [0,1,2] 
S = [1,1,1] 
totNFM = np.sum(NFM) 
Q = S 
psi = np.zeros((totNFM + 1 , 4)) 
phi = np.zeros(totNFM) 
FMMID = np.zeros((totNFM, 1)) 
delta = np.zeros((totNFM, 1)) 
j = 0 
#Compute Discretization## 
for i in range(0, len(NFM)): 
    delta[j: j+NFM[i]] = (NCM[i+1] - NCM[i])/NFM[i] 
    S[j: j+NFM[i], :] = S[i]/2.0 
    FMMID[j: j+NFM[i]] = RegMat[i] 
    j = np.sum[NFM[0:i]] 
+1

你有什麼意圖'S [j:j + NFM [i],:]'?逗號不應該在那裏 – RafaelC

回答

1

正確sintax是[start:stop:step]

所以S[j: j+NFM[i], :]不正確。它應該是S[j: j+NFM[i] :]沒有逗號。

0

刪除逗號:

S[j: j+NFM[i], :] = S[i]/2.0 

它應該是:

S[j:j+NFM[i]:] = S[i]/2.0 

而且,由於你沒有使用步驟中,您可以使用:

S[j:j+NFM[i]] = S[i]/2.0 
0

好吧,我覺得語法是正確的。 S[j: j+NFM[i], :] = S[i]/2.0這實際上是創建一個行。問題出在一個任意的源聲明,S = [1,1,1]這實際上是一個錯字(TypeError)。我將其更改爲S = np.zeros((totNFM,4)),錯誤消失。

+0

不,sintax是__incorrect__。切片時不能用逗號分隔,也不能將元組作爲「參數」傳遞。 – RafaelC

+1

我很抱歉不清楚。 S = np.zeros((totNFM,4))與totNFM = 12創建一個12 x 4矩陣的零。在j = 0的情況下,S [j:j + NFM [i],:]給出了NFM(i)該矩陣的行數。如果NFM(i)= 4,S =陣列([[0.,0,0,0,0], [0.,0,0,0,0], [ ,0,0], [0,0,0,0,0]]) 因此,您的邏輯是正確的。 – sparrow

相關問題