2012-04-30 22 views
20

Así que tienen estas condiciones:múltiples condiciones usando 'o' en array numpy

A = 0 a 10 O 40 a 60

B = 20 a 50

y tengo este código:

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

Mi pregunta es: cómo Qué debo hacer 'O' condición en numpy?

Respuesta

25

Si numpy sobrecargas & para booleano and se puede asumir con seguridad que | es booleano or.

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

Creo que '&' es bitwise y ... que (en este caso) es irrelevante ya que (A> 0) es una matriz de 'True' /' False' (es decir '1's y' 0' s) – mgilson

+0

Una cuestión es no olvidar poner las desigualdades entre paréntesis debido a su menor prioridad de operación. –

22

está ahí numpy.logical_or

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

numpy logical_and y logical_or son los ufuncs que desee (creo)

Tenga en cuenta que & no es logical and, es bit a bitand. Esto todavía funciona para usted porque (a> 10) devuelve una matriz lógica (por ejemplo, 1 y 0) como lo hace su segunda condición. Entonces, en este caso, "lógico y" y "bit a bit y" son equivalentes (lo mismo con lógica y bit a bit or). Pero en otros casos, las operaciones bit a bit pueden arrojar resultados sorprendentes (sobre todo porque los operadores & y | de python tienen una prioridad inferior a la esperada en estos contextos).