0

私はPythonが初めてで、NumPyを使用して次のエラーを修正する方法がわかりません:

if (energy < min_energy):
    min_energy = energy;
    min_pos_current = c;
    min_pos_previous = p;

if (energy < min_energy):
ValueError: The truth value of an array with more than one element is 
ambiguous. Use a.any() or a.all()

誰かがこの問題を手伝ってくれますか?

4

1 に答える 1

4

このエラーは NumPy から発生します。

NumPy では、2 つの配列を<で比較すると、要素全体の比較の結果である配列が得られます。これは、 で 2 つの配列を追加した場合とまったく同じです+

これを見てください:

>>> a = np.array([1, 2, 3])
>>> b = np.array([2, 2, 2])
>>> a+b
array([3, 4, 5])
>>> a < b
array([True, False, False])

それで、それと何をifするのarray([True, False, False])ですか?それは真実ではありません、それは間違っていません。これは値のコレクションであり、一部は true で一部は false です。これが、NumPy がまさにそれを示すエラー メッセージを表示する理由です: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().

ここで実際に何をテストしようとしているのかを決定する必要があります。必要に応じて、おそらく簡単な書き方があります。たとえば、 のすべての値がaの対応する値より小さいかどうかを知りたい場合、それはbです(a < b).all()。しかし、ベクトルとして扱われるaとのノルムなどを比較したい場合、それは明らかに機能しません。bまたは、それらを Python のタプルであるかのように辞書的に比較したい場合。等々。あなたがここで望むかもしれない無限の可能な意味のどれを知らなければ、それを書く方法を誰もあなたに教えることはできません.

于 2013-11-06T20:42:43.133 に答える