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,]