当做布尔阵列比较,是否有任何优势/惯例使用&
代替*
或|
代替+
?这些总是等价的吗?&vs *和| vs +
(如果这些文档中,链接可能会是一个可以接受的答案,但我对“numpy的符号”和“numpy的元素单元的布尔比较”天真的搜索没有任何屈服相关)
当做布尔阵列比较,是否有任何优势/惯例使用&
代替*
或|
代替+
?这些总是等价的吗?&vs *和| vs +
(如果这些文档中,链接可能会是一个可以接受的答案,但我对“numpy的符号”和“numpy的元素单元的布尔比较”天真的搜索没有任何屈服相关)
在numpy的&
和|
相当于np.bitwise_and
和np.bitwise_or
。您也可以使用^
作为np.bitwise_xor
。这全部记录在ndarray文档的Arithmetic and comparison operations部分。还有用于np.logical_and
,np.logical_or
和np.logical_xor
的ufunc。
如果你的数组都是dtype bool
那就不应该有任何区别。我个人的偏向&
和|
,即使你是不严格有关bool
D型它可以让你在烦恼像这样:
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
就我而言,我使用&
和|
作出明确,我很感兴趣,布尔运算(如果读者忘记了有问题的阵列的D型)。