2012-04-30 14 views

risposta

25

Se NumPy Sovraccarichi & per booleano and si può tranquillamente supporre che | è booleano or.

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

Penso che '&' sia bit per bit e ... che (in questo caso) è irrilevante dato che (A> 0) è un array di 'True' /' False' (cioè '1's e' 0' s) – mgilson

+0

Un getcha è non dimenticare di mettere le disuguaglianze tra parentesi a causa della loro priorità operativa inferiore. –

22

C'è numpy.logical_or

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

NumPy logical_and e logical_or sono le ufuncs che si desidera (credo)

Nota che & non logical and è, è bit a bitand. Questo funziona ancora per te perché (a> 10) restituisce un array logico (ad esempio 1 e 0) come fa la seconda condizione. Quindi, in questo caso, "logico e" e "bit per bit" sono equivalenti (lo stesso con or logico e bit a bit). Ma in altri casi, le operazioni bit a bit possono dare risultati sorprendenti (principalmente perché gli operatori di Python & e | hanno precedenza più bassa del previsto in questi contesti).