On 6/21/06, Erin Sheldon <[EMAIL PROTECTED]> wrote:
On 6/20/06, Bill Baxter <[EMAIL PROTECTED]> wrote:
> I think that one's on the NumPy for Matlab users, no?
>
> http://www.scipy.org/NumPy_for_Matlab_Users
>
> >>> import numpy as num
>  >>> a = num.arange (10).reshape(2,5)
> >>> a
> array([[0, 1, 2, 3, 4],
>        [5, 6, 7, 8, 9]])
> >>> v = num.rand(5)
> >>> v
> array([ 0.10934855,  0.55719644,  0.7044047 ,  0.19250088,  0.94636972])
>  >>> num.where(v>0.5)
> (array([1, 2, 4]),)
> >>> a[:, num.where(v>0.5)]
> array([[[1, 2, 4]],
>
>        [[6, 7, 9]]])
>
> Seems it grows an extra set of brackets for some reason.  Squeeze will get
> rid of them.
>
> >>> a[:, num.where(v>0.5)].squeeze()
> array([[1, 2, 4],
>        [6, 7, 9]])
>
> Not sure why the squeeze is needed.  Maybe there's a better way.

where returns a tuple of arrays.  This can have unexpected results
so you need to grab what you want explicitly:

>>> (w,) = num.where(v>0.5)
>>> a[:,w]
array([[1, 2, 4],
       [6, 7, 9]])

Ah, yeh, that makes sense.  Thanks for the explanation.  So to turn it back into a one-liner you just need:

>>> a[:,num.where(v>0.5)[0]]
array([[1, 2, 4],
       [6, 7, 9]])

I'll put that up on the Matlab->Numpy page.

--bb
_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/numpy-discussion

Reply via email to