[SciPy-user] really basic where() function question
Robert Kern
robert.kern@gmail....
Mon Aug 27 22:50:40 CDT 2007
Michael Hearne wrote:
> I'm trying to put together a presentation at work on Python, and I'm
> confused about the where() numpy function.
>
> The documentation, which is scant, indicates that where() requires three
> input arguments:
It doesn't require 3; it can take either 1 or 3. It does that find()-like
behavior when given only one argument.
> where(condition,x,y) returns an array shaped like condition and has
> elements of x and y where condition is respectively true or false
>
> First, I have to admit that I don't understand what x and y are for here.
They provide the actual values that will be in the result. There are a number of
use cases. For example, let's say you wanted to rectify an image: each pixel
with a value less than a threshold will become 0 and those at or above will be 255:
img = where(img < theshold, 0, 255)
Or, let's say you wanted to leave the above-threshold values alone:
img = where(img < threshold, 0, img)
> Second, I want to use where() like find() in Matlab - namely:
> a = array([3,5,7,9])
> i = where(a <= 6) => should return (array([0, 1]),)
> (see http://www.scipy.org/Numpy_Example_List#head-7de97cb88f064612d2f339e9713a949cd7f2f804)
>
> instead, I get this error:
> ---------------------------------------------------------------------------
> <type 'exceptions.TypeError'> Traceback (most recent call last)
>
> /Users/mhearne/scipy/<ipython console> in <module>()
>
> <type 'exceptions.TypeError'>: where() takes exactly 3 arguments (1 given)
>
> What am I doing wrong? Or did the usage of where() change since the
> cookbook example was written?
It works for me. Exactly what code did you type in? Copy-and-paste the whole
thing along with the traceback in context.
In [1]: from numpy import *
In [2]: a = array([3,5,7,9])
In [3]: i = where(a <= 6)
In [4]: i
Out[4]: (array([0, 1]),)
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
More information about the SciPy-user
mailing list