&vs*和| vs +

kef*_*ich 9 numpy

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

(如果这些是在文档中,链接可能是一个可接受的答案,但我天真地搜索'numpy&符'和'numpy elementwise布尔比较'没有产生任何相关的东西)

Jai*_*ime 7

在numpy &和|相当于np.bitwise_and和np.bitwise_or.您还可以使用^的np.bitwise_xor.这些都记录在ndarray文档的算术和比较操作部分中.还有用于ufuncs np.logical_and,np.logical_or和np.logical_xor.

如果你的数组都是dtype,bool那么应该没有任何区别.我个人的偏向&和|,即使你是不是严格对boolD型它可以让你在这样的烦恼:

In [30]: np.array(2) & np.array(1)
Out[30]: 0
Run Code Online (Sandbox Code Playgroud)


Dav*_*ker 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
Run Code Online (Sandbox Code Playgroud)

就我而言,我使用&并|明确表示我对布尔操作感兴趣(如果读者忘记了相关数组的dtype).