ValueError: 複数の要素を持つ配列の真理値があいまいです。a.any() または a.all() を使用してください。質問する

ValueError: 複数の要素を持つ配列の真理値があいまいです。a.any() または a.all() を使用してください。質問する

xをNumPy配列とします。次のようになります。

(x > 1) and (x < 3)

次のエラーメッセージが表示されます:

ValueError: 複数の要素を持つ配列の真理値があいまいです。a.any() または a.all() を使用してください。

これを修正するにはどうすればいいでしょうか?

ベストアンサー1

aおよび がbブール NumPy 配列の場合、この&演算はそれらの要素ごとの論理積を返します。

a & b

これはブール配列を返します。これを単一のブールにするには、次のいずれかを使用します。

(a & b).any()

または

(a & b).all()

注意:aおよび が非ブール配列bである場合は、代わりにまたは を検討してください。(a - b).any()(a - b).all()


根拠

NumPy 開発者は、ブール値のコンテキストで配列を評価するための一般的に理解されている方法は 1 つもないと感じていました。つまり、任意の要素が であるTrueかどうか、すべての要素が であるかどうか、配列の長さが 0 でないかどうかなど、3 つの可能性を挙げるだけで意味が異なります。TrueTrueTrueTrue

ユーザーによってニーズや想定が異なる可能性があるため、NumPy 開発者は推測することを拒否し、ValueErrorブール コンテキストで配列を評価しようとするたびに を発生させることにしました。2andつの NumPy 配列に適用すると、2 つの配列がブール コンテキストで評価されます ( __bool__Python3 では を、__nonzero__Python2 では を呼び出すことによって)。

おすすめ記事