10

在进行布尔数组比较时,使用&代替*|代替有什么优势/约定+?这些总是等价的吗?

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

4

2 回答 2

8

在 numpy中&and|等价于np.bitwise_andand np.bitwise_or。您也可以^使用np.bitwise_xor. 这都记录在 ndarray 文档的算术和比较操作部分。np.logical_and和也有np.logical_orufunc np.logical_xor

如果您的数组都是 dtypebool应该没有任何区别。我个人倾向于&and |,即使你对booldtype 不严格,它也会让你陷入这样的麻烦:

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 回答