以下の内容はhttps://anton0825.hatenablog.com/entry/2021/10/05/000000より取得しました。


Pythonでオブジェクト==で比較すると「{ValueError}The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()」エラー

発生条件は以下。

  • @dataclassの付いたclassのオブジェクトを==で比較する
  • そのclassのインスタンス変数にnumpy.ndarrayがある

原因は以下。

@dataclassで自動生成されるeqメソッドは、そのクラスのフィールドからなるタプルを比較する

参考: docs.python.org

ndarray同士の比較結果は、各要素毎の比較結果を格納したndarrayになることがある。

参考: nishidy.hatenablog.com

なのでタプルの要素の一つにnumpy.ndarrayがあると、ndarray同士の比較の結果、ndarrayが生成され、結果がboolでないのでエラーになる。

今回は値が同じかでなく、オブジェクトが同じかを確認したかったのでid(obj)でオブジェクトのIDを取得して比較するよう修正した。

参考:

qiita.com




以上の内容はhttps://anton0825.hatenablog.com/entry/2021/10/05/000000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14