How do you do element-wise and and or
operations on arrays?
In IDL, the and
and or operators are logical operators which,
when applied to an array, operate element-wise on the array and
in sequence following standard operator precedence. Thus, in IDL:
IDL> a = [3, 6, 9] IDL> print, (a gt 4) and (a lt 8) 0 1 0
In Python, however, and and or are boolean
operators and when operated
on arrays do not return element-wise comparison but either one of the
operands. Thus, if you have the expression x and y,
x is returned if x is False
and y
otherwise; see Martelli (2003, p. 44) for details. Thus, in Python:
>>> import Numeric as N >>> a = N.array([3, 6, 9]) >>> a > 4 [0,1,1,] >>> a < 8 [1,1,0,] >>> (a > 4) and (a < 8) [1,1,0,]
since a > 4 evaluates as True
(because it is non-empty),
the and
statement returns the result of a < 8 as the final
result.
(Note that this issue arises with Numeric
arrays but not with numarray arrays.
With numarray arrays, an attempt to treat
an array like a truth value (e.g. with an and
statement) will throw a RuntimeError exception.)
To get element-wise comparison, use the logical_and and
logical_or functions in Numeric:
>>> import Numeric as N >>> a = N.array([3, 6, 9]) >>> N.logical_and(a > 4, a < 8) [0,1,0,]