&安培; vs *和| vs +

时间:2013-02-04 02:19:19

标签: numpy

在进行布尔数组比较时,使用&代替*|代替{{1}是否有任何优势/惯例? }?这些总是相同吗?

(如果这些在文档中,链接可能是一个可以接受的答案,但我对'numpy&符号'和'numpy elementwise boolean comparison'的天真搜索没有产生任何相关的内容)

2 个答案:

答案 0 :(得分:5)

numpy &|相当于np.bitwise_andnp.bitwise_or。您也可以^使用np.bitwise_xor。这些都记录在ndarray文档的Arithmetic and comparison operations部分中。还有np.logical_andnp.logical_ornp.logical_xor的ufunc。

如果您的数组都是dtype bool,那么应该没有任何区别。我个人倾向于&|,即使你对bool dtype并不严格,它也会让你遇到这样的麻烦:

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

答案 1 :(得分: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 )。