Pergunta sobre python, numpy – Várias condições usando 'ou' em matriz numpy

22

Então eu tenho estas condições:

A = 0 a 10OU 40 a 60

B = 20 a 50

e eu tenho esse código:

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

Minha pergunta é: como faço?OU'condição em numpy?

Sua resposta

2   a resposta
24

numpy.logical_or

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

numpylogical_and elogical_or são os ufuncs que você quer (eu acho)

Observe que& não élogical and, isto ébit a bit and. Isso ainda funciona para você porque (a> 10) retorna um array lógico (por exemplo, 1's e 0s) como sua segunda condição. Então, neste caso, "lógico e" e "bit a bit e" são equivalentes (mesmo com lógico e bit a bitor). Mas em outros casos, as operações bit a bit podem produzir resultados surpreendentes (principalmente porque& e| operadores têm menor precedência do que o esperado nesses contextos).

28

Se sobrecargas numpy& para booleanand você pode seguramente assumir que| é booleanoor.

<code>area1 = N.where(((A>0) & (A<10)) | ((A>40) & (A<60))),1,0)
</code>
eu penso isso& é bitwise e ... o qual (neste caso) é irrelevante já que (A> 0) é uma matriz deTrue/False (isto é1areia0s) mgilson
Uma pegadinha é não esquecer de colocar as desigualdades entre parênteses por causa de sua menor prioridade de operação. Roman Shapovalov

Perguntas relacionadas