1. ホーム
  2. パイソン

Pythonはエラーを報告します。複数の要素を持つ配列の真理値はあいまいです。

2022-02-23 02:06:28
<パス

前文

プログラマーの人生は、バグとの戦いの一生である。後進の便宜と、時折の自身の復習のために、この記事を書いて自分のバグを記録しているのである。

目次

記事目次

全文

pythonを使っていると、必ずと言っていいほど特有のエラーが発生しますが、numpyパッケージを呼び出した後に、このエラーに遭遇することがよくあります。

DeprecationWarning: The truth value of an empty array is ambiguous. 
Returning False, but in future this will 
Use `array.size > 0` to check that an array is not empty.


今日は、この問題を解決するために

解決方法

Numpyは論理式の判別が曖昧で、等号の両側にある2つの方程式が数値的に等しければFalseを返すし、等号の両側にある2つの方程式が論理的に等しいのでTrueを返す。これは曖昧だと感じ、判断するのをあきらめ、or比較の場合はa.any()、with比較の場合はa.all()で統一している。これは次の例で体験できる。

import numpy as numpy
a=np.zeros(3)
a[0]=0; a[1]=2; a[2]=1
print (a-[0,2,1]).any() #[0,0,0] False
print (a-[0,2,1]).all() #[0,0,0] False
print (a-[1,3,2]).any() #[-1,-1,-1] True
print (a-[1,3,2]).all() #[-1,-1,-1] True
print (a-[0,3,2]).any() #[0,-1,-1] True
print (a-[0,3,2]).all() #[0,-1,-1] False


(a-b)比較のためのnumpy-array配列、Trueは異なる、Falseは同じを意味する

一部の要素は等しい、つまり numpy.all() はFalseを返し(多くの場合、期待されていない) numpy.any() はTrueを返します。すべての要素が等しい場合、どちらもFalseを返すので numpy.any() 比較する