[Numpy-discussion] Numpy array in iterable
josef.pktd@gmai...
josef.pktd@gmai...
Wed Feb 25 07:40:47 CST 2009
On Wed, Feb 25, 2009 at 7:28 AM, Kim Hansen <slaunger@gmail.com> wrote:
> Hi Numpy discussions
> Quite often I find myself wanting to generate a boolean mask for fancy
> slicing of some array, where the mask itself is generated by checking
> if its value has one of several relevant values (corresponding to
> states)
> So at the the element level thsi corresponds to checking if
> element in iterable
> But I can't use the in operator on a numpy array:
>
> In [1]: test = arange(5)
> In [2]: states = [0, 2]
> In [3]: mask = test in states
> ---------------------------------------------------------------------------
> ValueError Traceback (most recent call last)
> C:\Documents and Settings\kha\<ipython console> in <module>()
> ValueError: The truth value of an array with more than one element is ambiguous.
> Use a.any() or a.all()
>
> I can however make my own utility function which works effectively the
> same way by iterating through the states
>
> In [4]: for i, state in enumerate(states):
> ...: if i == 0:
> ...: result = test == state
> ...: else:
> ...: result |= test == state
> ...:
> ...:
> In [5]: result
> Out[5]: array([ True, False, True, False, False], dtype=bool)
>
> However, I would have thought such an "array.is_in()" utility function
> was already available in the numpy package?
>
> But I can't find it, and I am curious to hear if it is there or if it
> just available in another form which I have simply overlooked.
>
> If it is not there I think it could be a nice extra utility funtion
> for the ndarray object.
>
> --Slaunger
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion@scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion
>
does this help:
>>> np.setmember1d(test,states)
array([ True, False, True, False, False], dtype=bool)
Josef
More information about the Numpy-discussion
mailing list