[Numpy-discussion] Indices returned by where()

Charles R Harris charlesr.harris at gmail.com
Thu Dec 7 00:17:52 CST 2006


On 12/6/06, Christian Marquardt <christian at marquardt.sc> wrote:
>
> Dear list,
>
> apologies if the answer to my question is obvious...
>
> Is the following intentional?
>
>   $>python
>
>   Python 2.4 (#1, Mar 22 2005, 21:42:42)
>   [GCC 3.3.5 20050117 (prerelease) (SUSE Linux)] on linux2
>   Type "help", "copyright", "credits" or "license" for more information.
>
>   >>> import numpy as np
>   >>> print np.__version__
>   1.0
>
>   >>> x = np.array([1., 2., 3., 4., 5.])
>
>   >>> idx = np.where(x > 6.)
>   >>> print len(idx)
>   1
>
> The reason is of course that where() returns a tuple of index arrays
> instead of simply an index array:
>
>   >>> print idx
>   (array([], dtype=int32),)
>
> Does that mean that one always has to explicitely request the first
> element of the returned tuple in order to check how many matches were
> found, even for 1d arrays? What's the reason for designing it that way?


Fancy indexing.

In [1]: a = arange(10).reshape(2,5)

In [2]: i = where(a>3)

In [3]: i
Out[3]: (array([0, 1, 1, 1, 1, 1]), array([4, 0, 1, 2, 3, 4]))

In [4]: a[i] = 0

In [5]: a
Out[5]:
array([[0, 1, 2, 3, 0],
       [0, 0, 0, 0, 0]])


If you just want a count, try

In [6]: a = arange(10).reshape(2,5)

In [7]: sum(a>3)
Out[7]: 6

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20061206/24c84a68/attachment.html 


More information about the Numpy-discussion mailing list