web-dev-qa-db-ja.com

numpy.logical_andと&の違い

2つ以上のnumpy配列の_logical_and_を使用しようとしています。 numpyに関数logical_and()があることは知っていますが、単純な演算子_&_は同じ結果を返し、潜在的に使いやすいことがわかりました。

たとえば、3つのnumpy配列a、b、およびcについて考えてみます。 np.logical_and(a, np.logical_and(b,c))は_a & b & c_と同等ですか?

それらが(多かれ少なかれ)同等である場合、logical_and()を使用する利点は何ですか?

18
user3821012

@ user1121588はコメントでこれのほとんどに答えました、しかし完全に答えるために...

"Bitwise and"(&)はブール配列のlogical_andとほとんど同じように動作しますが、logical_andを使用するだけでなく意図も伝えず、誤解を招く可能性があります。重要なケース(おそらく、パックされた配列またはスパース配列)での回答。

複数の配列でlogical_andを使用するには、次のようにします。

np.logical_and.reduce([a, b, c])

ここで、引数は、一緒にlogical_andしたい数の配列のリストです。それらはすべて同じ形でなければなりません。

17
Terry Brown

NumPyブール配列で_&_の代わりに_logical_and_を使用できるという公式の確認をグーグルで調べていて、1つ見つかりました NumPy v1.15マニュアルで

ブール引数があることがわかっている場合は、NumPyのビット演算子を使用する必要はありませんが、z = (x > 1) & (x < 2)のように括弧に注意してください。 _logical_and_および_logical_or_のNumPy演算子形式がないことは、Pythonの設計の残念な結果です。

したがって、_~_には_logical_not_を使用し、_|_には_logical_or_を使用することもできます。

8