Numeric: 'where' function conditions

Robert Kern rkern at ucsd.edu
Mon Nov 29 18:17:58 EST 2004


Jorl Shefner wrote:
> Could anyone tell me the efficient way to do this?   Extracting values 
> from an array for a single condition (say all values greater than 'x') 
> using 'where' and 'compress' is simple enough.  
> 
> 
>>>>from Numeric import arange,where,compress
>>>>data= arange(10)
>>>>data= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>>mask= where((data > 3),1,0)
>>>>result= compress(mask,data)
>>>>result
> 
> array([4, 5, 6, 7, 8, 9])
> 
> But, 'where' doesn't appear to allow for multiple conditions in one 
> statement.  For instance, I'd like to do something like:
> 
> mask= where((3 < data <= 7),1,0)
> 
> but, this won't work.

Right. "3 < data" creates an array of 0s and 1s where the condition is 
false and true, respectively. You don't need where() at all.

Try

mask = logical_and(3 < data, data <= 7)

-- 
Robert Kern
rkern at ucsd.edu

"In the fields of hell where the grass grows high
  Are the graves of dreams allowed to die."
   -- Richard Harter



More information about the Python-list mailing list