ブール配列の比較を行う場合&
、代わりに*
または|
代わりに使用する利点/規則はあり+
ますか? これらは常に同等ですか?
(これらがドキュメントにある場合、リンクはおそらく受け入れられる答えですが、「numpyアンパサンド」と「numpy elementwise boolean comparison」の単純な検索では、関連するものは何も得られませんでした)
ブール配列の比較を行う場合&
、代わりに*
または|
代わりに使用する利点/規則はあり+
ますか? これらは常に同等ですか?
(これらがドキュメントにある場合、リンクはおそらく受け入れられる答えですが、「numpyアンパサンド」と「numpy elementwise boolean comparison」の単純な検索では、関連するものは何も得られませんでした)
numpy では&
andはand|
と同等です。にも使えます。これはすべて、ndarray ドキュメントの算術演算と比較演算のセクションに記載されています。、およびの ufunc もあります。np.bitwise_and
np.bitwise_or
^
np.bitwise_xor
np.logical_and
np.logical_or
np.logical_xor
配列がすべて dtype の場合bool
、違いはありません。&
私は個人的にandに傾いていますが、 dtypeに|
厳密でない場合でも、次のような問題が発生する可能性があります。bool
In [30]: np.array(2) & np.array(1)
Out[30]: 0
誰かが疑問に思った場合に備えて: 操作の速度は同じであるため、どちらを選択しても問題ありません。
In [1]: import numpy as np
In [2]: a = np.random.randn(1000)>0
In [3]: b = np.random.randn(1000)>0
In [4]: %timeit a*b
100000 loops, best of 3: 2.89 us per loop
In [5]: %timeit a&b
100000 loops, best of 3: 2.87 us per loop
In [6]: %timeit a+b
100000 loops, best of 3: 2.69 us per loop
In [7]: %timeit a|b
100000 loops, best of 3: 2.62 us per loop
私に関する限り、ブール演算に興味があることを明示するために&
andを使用|
します (読者が問題の配列の dtype を忘れた場合)。