在进行布尔数组比较时,使用&
代替*
或|
代替有什么优势/约定+
?这些总是等价的吗?
(如果这些在文档中,链接可能是一个可以接受的答案,但我对“numpy & 符号”和“numpy elementwise boolean comparison”的天真搜索没有产生任何相关信息)
在进行布尔数组比较时,使用&
代替*
或|
代替有什么优势/约定+
?这些总是等价的吗?
(如果这些在文档中,链接可能是一个可以接受的答案,但我对“numpy & 符号”和“numpy elementwise boolean comparison”的天真搜索没有产生任何相关信息)
在 numpy中&
and|
等价于np.bitwise_and
and np.bitwise_or
。您也可以^
使用np.bitwise_xor
. 这都记录在 ndarray 文档的算术和比较操作部分。np.logical_and
和也有np.logical_or
ufunc np.logical_xor
。
如果您的数组都是 dtypebool
应该没有任何区别。我个人倾向于&
and |
,即使你对bool
dtype 不严格,它也会让你陷入这样的麻烦:
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)。