2013-02-04 8 views
7

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

(これらはドキュメントである場合、リンクはおそらく許容答えであるだろうが、「numpyのアンパサンド」と「numpyの要素ごとのブール比較」の私の素朴な検索は、関連する何かを得られなかった)

答えて

5

numpyのは&および|は、np.bitwise_andおよびnp.bitwise_orに相当します。 np.bitwise_xorには^を使用することもできます。これはすべてndarrayドキュメントのArithmetic and comparison operationsセクションに記載されています。 np.logical_and,np.logical_orおよびnp.logical_xorのufuncsもあります。

アレイがすべてdtype boolの場合、違いはありません。私は個人的にあなたがbool DTYPEについて厳密でない場合には、このようなトラブルにあなたを得ることができるにもかかわらず、&|方に傾く:

In [30]: np.array(2) & np.array(1) 
Out[30]: 0 
5

場合、誰かに疑問に思った:操作は同じ速度を持っており、それゆえありませんどちらを選ぶかは関係ありません。私に関する限り

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 

、私は私が(場合には、読者は、問題の配列のDTYPEを忘れてしまった)ブーリアン演算に興味があることを明示するために&|を使用しています。

関連する問題