2012-04-30 25 views
20

Vì vậy, tôi có những điều kiện này:Nhiều điều kiện sử dụng 'hoặc' trong mảng NumPy

A = 0-10 HOẶC 40-60

B = 20 để 50

và tôi có mã này:

area1 = N.where((A>0) & (A<10)),1,0) 
area2 = N.where((B>20) & (B<50)),1,0) 

Câu hỏi của tôi là: cách cách nào để làm điều kiện 'HOẶC' trong tình trạng khó khăn?

Trả lời

25

Nếu quá tải numpy & cho boolean and bạn có thể giả định rằng | là boolean or.

area1 = N.where(((A>0) & (A<10)) | ((A>40) & (A<60))),1,0) 
+1

Tôi nghĩ rằng '&' là bitwise và ... mà (trong trường hợp này) là không thích hợp vì (A> 0) là một mảng 'True' /' False' (tức là '1' và '0' s) – mgilson

+0

Một lưu ý là không quên đặt sự bất bình đẳng trong dấu ngoặc đơn vì ưu tiên vận hành thấp hơn của chúng. –

22

numpy.logical_or

http://docs.scipy.org/doc/numpy/reference/generated/numpy.logical_or.html

NumPy logical_andlogical_or là ufuncs mà bạn muốn (tôi nghĩ)

Lưu ý rằng & không logical and, nó là Bitwiseand. Điều này vẫn hoạt động cho bạn vì (a> 10) trả về một mảng hợp lý (ví dụ: 1 và 0) cũng như điều kiện thứ hai của bạn. Vì vậy, trong trường hợp này, "hợp lý và" và "bitwise và" là tương đương (tương tự với logic và bitwise or). Nhưng trong các trường hợp khác, các hoạt động bitwise có thể mang lại kết quả đáng ngạc nhiên (chủ yếu là do các toán tử &| của python có mức ưu tiên thấp hơn dự kiến ​​trong các ngữ cảnh này).

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