在进行布尔数组比较时,使用&
代替*
或|
代替{{1}是否有任何优势/惯例? }?这些总是相同吗?
(如果这些在文档中,链接可能是一个可以接受的答案,但我对'numpy&符号'和'numpy elementwise boolean comparison'的天真搜索没有产生任何相关的内容)
答案 0 :(得分: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
的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 )。