2012-11-13 59 views
0

我不知道這個程序的問題是什麼(我幾天前開始學習python)。我寫了這個程序,它工作正常b=np.array([[1,2,2], [3,2,1], [3,1,5]]),但是當我使用不同的陣列b = np.array([[1,2,3], [3,2,1], [3,1,5]])它給出了錯誤。謝謝大家,我修復了第一個錯誤。TypeError:idle_formatwarning_subproc()需要正好4個參數(給出5)

但是,現在我得到另一個錯誤,當我在我的課程中使用此文件作爲函數時,我正在獲取下面提到的第二個錯誤。當我將dist [s,i]與0.0 if(dist [s,i] == 0.0)進行比較時:它需要整個數組。以前它只採用特定的dist [s,i]值。

我已經試過這個次數,並已經通過了一些這樣的錯誤給出的解釋。如果有人能幫助解決這個問題,我將不勝感激。

該程序計算'a'和'b'中點之間的距離以及點之間的歸屬(memb)。我知道可能有一個愚蠢的錯誤,但我在這方面工作很多,仍然是空白。

from numpy import * 
import numpy as np 

a=np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]]) 
b = np.array([[1,2,3], [3,2,1], [3,1,5]]) 

diff = a[newaxis,:,:] - b[:,newaxis,:] 
dist=sqrt(np.sum((diff*diff),-1)) 

(n, d) = shape(a) 
k = len(dist) 

memb = np.zeros((k, n), dtype=float) 
for i in range(n): 
    count = 0 
    for s in range(k): 
     if (dist[s,i] == 0.0): 
      count = count + 1 
     if (dist[s,i] != 0.0): 
      try: 
       nume = dist[s,i] 
       temp = 0.0 
       for j in range(k): 
        deno = dist[j,i] 
        temp += (nume/deno)**2 
       memb[s,i] = 1.0/temp 
      except: 
       deno=0.0 
     else: 
      for s in range(k): 
       if (dist[s,i] == 0.0): 
        memb[s,i] = 1.0/count 
       else: 
        memb[s,i] = 0.0    
print memb 

這是錯誤:

Traceback (most recent call last): 
File "C:\python26\ask", line 186, in <module> 
    main() 
File "C:\python26\ask", line 25, in main 
    memb = membMat(data, k, dist, m) 
File "C:\python26\cmean new", line 121, in membMat 
    if (dist[s][i] == 0.0): 
ValueError: The truth value of an array with more than one element is ambiguous. Use  a.any() or a.all() 

Traceback (most recent call last): 
    File "C:/Users/ask/kk/pyth", line 25, in <module> 
    temp += ((nume/deno)) 
    File "C:\python26\lib\warnings.py", line 29, in _show_warning 
    file.write(formatwarning(message, category, filename, lineno, line)) 
TypeError: idle_formatwarning_subproc() takes exactly 4 arguments (5 given) 
+1

爲什麼有括號的兩個層次中'溫度+ =((nume /傑諾))' – itsbruce

+0

它是由錯誤,我糾正它。 – arunk

回答

0

您發佈的第二矩陣是奇異的。我使用this simple calculator tool來查找行列式爲0.這意味着您不能反轉矩陣,從而程序崩潰。

我建議你在分割之前先檢查一下系統,以確保你不會在未來崩潰。

+1

是的,謝謝你,我糾正了,當deno是零時,temp是無限的。 – arunk

+0

我建議你接受這個問題的答案,然後張貼另一個問題給你的更新結果。 – PearsonArtPhoto

+0

但現在我有另一個問題。我編輯了我的問題。 – arunk

0

也許你需要更新的版本Idle。這看起來像一個之前出現並修復的錯誤。您可能正在使用引發警告的模塊,並希望函數在idle_formatwarning_subproc()函數中採用額外的line=None參數。

http://bugs.python.org/issue4043

+0

@arunk - 你是否安裝了更新版本的Idle? – Aesthete

+0

是的,我檢查了它在2.7中,但仍然相同的值error..it是檢查整個數組(如果(dist [s] [i] == 0.0))而不是一個值。 – arunk

相關問題