35

So I have these conditions:

A = 0 to 10 OR 40 to 60

B = 20 to 50

and I have this code:

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

My question is: how do I do 'OR' condition in numpy?

0

2 Answers 2

51

If numpy overloads & for boolean and you can safely assume that | is boolean or.

area1 = N.where(((A>0) & (A<10)) | ((A>40) & (A<60))),1,0)
Sign up to request clarification or add additional context in comments.

2 Comments

I think that & is bitwise and...which (in this case) is irrelevant since (A>0) is an array of True/False (i.e. 1s and 0s)
One gotcha is to not forget to put the inequalities in parentheses because of their lower operation priority.
33

There's numpy.logical_or

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

numpy logical_and and logical_or are the ufuncs that you want (I think)

Note that & is not logical and, it is bitwise and. This still works for you because (a>10) returns a logical array (e.g. 1's and 0's) as does your second condition. So, in this case, "logical and" and "bitwise and" are equivalent (same with logical and bitwise or). But in other cases, the bitwise operations may yield surprising results (mostly because python's & and | operators have lower precedence than expected in these contexts).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.