[SciPy-user] syntax for indexing
Damian Eads
eads@soe.ucsc....
Fri Nov 7 11:48:37 CST 2008
Hi Michael,
The following gives a mask array of the same size as the original array,
(x > 0.5) * (x < 0.8)
and using the mask array as an index, gives the values that meet the
condition above,
x[(x > 0.5) * (x < 0.8)]
If you want indices to the flat array, you first need to create a flat
view of it.
xr = x.ravel()
Note that xr is not a copy but a view of x with its striding
parameters changed appropriately.
In [23]: np.where((xr > 0.5) * (xr < 0.8))
Out[23]: (array([ 1, 3, 4, 6, 10]),)
I hope this helps.
Damian
On Fri, Nov 7, 2008 at 9:32 AM, Michael Hearne <mhearne@usgs.gov> wrote:
> Assume that I have a setup like this:
>
> from pylab import *
> x = random((4,4))
>
> I know how to get the indices of the values that are (for example),
> greater than 0.5:
> i = (x > 0.5).nonzero()
>
> How do I get the indices for those values in x that are greater than 0.5
> AND less than 0.8?
>
> I tried:
> i = (x > 0.5 && x < 0.8).nonzero()
> i = (x > 0.5 & x < 0.8).nonzero()
> i = (x > 0.5 and x < 0.8).nonzero()
>
> to no avail. Is this the wrong approach?
>
> For Matlab users, the functionality which I am trying to replicate is:
> x = rand(4,4);
> i = find(x > 0.5 & x < 0.8);
>
> Thanks,
>
> Mike
>
> --
> ------------------------------------------------------
> Michael Hearne
> mhearne@usgs.gov
> (303) 273-8620
> USGS National Earthquake Information Center
> 1711 Illinois St. Golden CO 80401
> Senior Software Engineer
> Synergetics, Inc.
-----------------------------------------------------
Damian Eads Ph.D. Student
Jack Baskin School of Engineering, UCSC E2-489
1156 High Street Machine Learning Lab
Santa Cruz, CA 95064 http://www.soe.ucsc.edu/~eads
More information about the SciPy-user
mailing list