10

ブール配列の比較を行う場合&、代わりに*または|代わりに使用する利点/規則はあり+ますか? これらは常に同等ですか?

(これらがドキュメントにある場合、リンクはおそらく受け入れられる答えですが、「numpyアンパサンド」と「numpy elementwise boolean comparison」の単純な検索では、関連するものは何も得られませんでした)

4

2 に答える 2

8

numpy では&andはand|と同等です。にも使えます。これはすべて、ndarray ドキュメントの算術演算と比較演算のセクションに記載されています。、およびの ufunc もあります。np.bitwise_andnp.bitwise_or^np.bitwise_xornp.logical_andnp.logical_ornp.logical_xor

配列がすべて dtype の場合bool、違いはありません。&私は個人的にandに傾いていますが、 dtypeに|厳密でない場合でも、次のような問題が発生する可能性があります。bool

In [30]: np.array(2) & np.array(1)
Out[30]: 0
于 2013-02-04T03:32:12.760 に答える
6

誰かが疑問に思った場合に備えて: 操作の速度は同じであるため、どちらを選択しても問題ありません。

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 を忘れた場合)。

于 2013-02-04T14:47:22.330 に答える