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]])エラーが発生します。みんなありがとう、最初のエラーを修正しました。

しかし、今、このファイルをクラスの関数として使用しているときに別のエラーが発生しています。以下の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)
4

2 に答える 2

0

投稿した2番目の行列は特異です。この単純な計算ツールを使用して、行列式が0であることを確認しました。これは、行列を反転できないため、プログラムがクラッシュすることを意味します。

将来クラッシュしないように、分割を行う前にシステムをチェックすることをお勧めします。

于 2012-11-13T11:45:51.733 に答える
0

Idleのバージョンを更新する必要があるかもしれません。これは、以前に発生し、修正されたバグのようです。おそらく、警告を発生させ、関数が関数内で追加のline=None引数を取ることを期待するモジュールを使用していidle_formatwarning_subproc()ます。

http://bugs.python.org/issue4043

于 2012-11-13T11:48:17.437 に答える