このプログラムの何が問題なのかわかりません (私は数週間前に 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]])
エラーが発生します。みんなありがとう、最初のエラーを修正しました。
しかし、今、このファイルをクラスの関数として使用しているときに別のエラーが発生しています。以下の2番目のエラーが発生しています。dist[s,i] と 0.0 を比較する場合 (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)