2013-02-04 60 views
7

Khi thực hiện boolean so sánh mảng, có bất kỳ lợi thế/quy ước nào để sử dụng & thay cho * hoặc | thay cho +? Những thứ này luôn luôn tương đương?& vs * và | vs +

(nếu đây là trong tài liệu, một liên kết có lẽ sẽ là một câu trả lời chấp nhận được, nhưng tìm kiếm ngây thơ của tôi cho 'dấu và NumPy' và 'NumPy elementwise so sánh boolean' không mang lại bất cứ điều gì có liên quan)

Trả lời

5

Trong NumPy &| tương đương với np.bitwise_andnp.bitwise_or. Bạn cũng có thể sử dụng ^ cho np.bitwise_xor. Đây là tất cả các tài liệu trong phần Arithmetic and comparison operations của tài liệu ndarray. Ngoài ra còn có ufuncs cho np.logical_and, np.logical_ornp.logical_xor.

Nếu mảng của bạn là tất cả dtype bool thì không có bất kỳ sự khác biệt nào. Cá nhân tôi nghiêng về phía &|, mặc dù nếu bạn không nghiêm ngặt về bool dtype nó có thể giúp bạn trong những rắc rối như thế này:

In [30]: np.array(2) & np.array(1) 
Out[30]: 0 
5

Trong trường hợp ai đó tự hỏi: các hoạt động có cùng tốc độ và do đó nó không quan trọng bạn chọn cái nào.

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 

Theo như tôi đang quan tâm, tôi sử dụng &| để làm cho rõ ràng rằng tôi quan tâm đến một hoạt động boolean (trong trường hợp người đọc quên dtype của mảng trong câu hỏi).

Các vấn đề liên quan