2015-04-01 56 views
1

嗨我不斷收到這個錯誤,當我跑我的代碼Python的INT太大,轉換爲C長碼需要解決

Traceback (most recent call last): 
    File "Jacobi.py", line 93, in <module> 
    limit, guess, statement = jacobi(sys.argv[1], sys.argv[2]) 
    File "Jacobi.py", line 65, in jacobi 
    guess[0, i] = guess2[0, i] 
OverflowError: Python int too large to convert to C long 

我下面貼我的代碼,任何人都得到了快速解決?它只是隨機的情況下不會一直這樣做。任何人都知道爲什麼?

def jacobi(file_name, tolIn): 

if file_name is None: 
    exit() 

#Turns file into one big matrix 
A = np.loadtxt(file_name, dtype=int64, delimiter=" ") 
aRows = int(A.shape[0]) 
aCols = int(A.shape[1]) 
bdim = (aRows, 1) 
b = np.zeros(bdim) 

s = raw_input("Please provide list of your guess values separated by spaces, e.g. 1 2 3: ") 
guess = np.matrix(s) 

#Creates nx1 b matrix 
for j in range(0, aRows): 
    b[j,0] = float(A[j, aCols-1]) 

#Creates甲矩陣 琳= [aCols-1] N = np.delete(A,琳,1) A = N

for i in range (0, A.shape[0]): 
    for k in range (0, A.shape[0]): 
     A[i,k] = round((A[i,k]),7) 
print(A) 
print ('\n') 
print(b) 


tol = float(tolIn) 

#Sets intial previous guess so loop does not stop first try 
prevGuess = np.zeros((1, aRows)) 
for i in range (0, aRows): 
    prevGuess[0,i] = 1000 


guess2 = np.zeros((1, aRows)) 
limit = 0 
aRows = int(A.shape[0]) 
aCols = int(A.shape[1]) 


while ((np.linalg.norm(guess - prevGuess) > tol) and limit < 100): 
    for j in range (0, aRows): 
     guess2[0,j] = b[j,0] 
     for i in range (0, aCols): 
      if (i != j): 
       guess2[0,j] = round((guess2[0,j] -(A[j,i]) * (guess[0,i])), 7) 
     guess2[0,j] = round((guess2[0,j]/A[j,j]), 7) 

    for i in range(0, aCols): 
      prevGuess[0,i] = guess[0, i] 
    for i in range(0, aCols-1): 
      guess[0, i] = round((guess2[0, i]), 7) 
    guess2 = np.zeros((1, aCols)) 
    limit = limit + 1 

#answers mod 2 to get real answers 
#for i in range(0,aCols): 
# guess[0,i] = guess[0,i]%2 

#print ('\n') 
#print(limit) 
#print ('\n') 
#print (guess) 
#print ('\n') 

回答

0

相信range()需要最大數量被包含在ac整數範圍內。如果你想解決這個問題,你可以使用itertools.count()。它從0開始(或者作爲參數傳遞的數字)並永遠計數(或者直到你破產)。

例子:

for i in itertools.count(): 
    if i == 10: 
     break 
    print i 

文檔:https://docs.python.org/2/library/itertools.html#itertools.count

+0

,但它適用於其他代碼,它做的文件即時通訊輸入。一個有小數,另一個只有直接的整數。 – 2015-04-01 03:35:16

+0

不幸的是我有很多你的代碼在問題中沒有被描述,所以我只能猜測每個部分的功能。我也無法自己測試它。你能否給出一些輸入,輸出和你期望的例子?這會幫助我更好地理解。 – ProfOak 2015-04-01 03:38:05

+0

輸入是一個包含值的.dat文件,我使用load.txt將其加載到矩陣中。我用直整數的文件,它工作得很好,我有一個長小數的文件,它會拋出該消息。我將用我的整個代碼編輯帖子。 – 2015-04-01 03:41:11