<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 5, 2015 at 3:16 AM, Sebastian Berg <span dir="ltr"><<a href="mailto:sebastian@sipsolutions.net" target="_blank">sebastian@sipsolutions.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">On Do, 2015-06-04 at 18:04 -0700, Nathaniel Smith wrote:<br>
> On Thu, Jun 4, 2015 at 5:57 PM, Nathaniel Smith <<a href="mailto:njs@pobox.com">njs@pobox.com</a>> wrote:<br>
> > So specifically the question is -- if you have an array with five<br>
> items, and<br>
> > a Boolean array with three items, then currently you can use the<br>
> later to<br>
> > index the former:<br>
> ><br>
> > arr = np.arange(5)<br>
> > mask = np.asarray([True, False, True])<br>
> > arr[mask] # returns array([0, 2])<br>
> ><br>
> > This is justified by the rule that indexing with a Boolean array<br>
> should be<br>
> > the same as indexing with the same array that's been passed to<br>
> np.nonzero().<br>
> > Empirically, though, this causes constant confusion and does not<br>
> seen very<br>
> > useful, so the question is whether we should deprecate it.<br>
><br>
> One place where the current behavior is particularly baffling and<br>
> annoying is when you have multiple boolean masks in the same indexing<br>
> operation. I think everyone would expect this to index separately on<br>
> each axis ("outer product indexing" style, like slices do), and that's<br>
> really the only useful interpretation, but that's not what it does...:<br>
<br>
<br>
</span>This is not being deprecated in there for the moment, it is a different<br>
discussion. Though maybe we can improve the error message to mention<br>
that the array was originally boolean, has always been bugging me a bit<br>
(it used to mention for some cases it is not anymore).<br>
<span class=""><font color="#888888"><br>
- Sebastian<br>
</font></span><div class=""><div class="h5"><br>
<br>
> In [3]: a = np.arange(9).reshape((3, 3))<br>
><br>
> In [4]: a<br>
> Out[4]:<br>
> array([[0, 1, 2],<br>
>        [3, 4, 5],<br>
>        [6, 7, 8]])<br>
><br>
> In [6]: a[np.asarray([True, False, True]), np.asarray([False, True,<br>
> True])]<br>
> Out[6]: array([1, 8])<br>
><br>
> In [7]: a[np.asarray([True, False, True]), np.asarray([False, False,<br>
> True])]<br>
> Out[7]: array([2, 8])<br>
><br>
> In [8]: a[np.asarray([True, False, True]), np.asarray([True, True,<br>
> True])]<br>
> ---------------------------------------------------------------------------<br>
> IndexError                                Traceback (most recent call<br>
> last)<br>
> <ipython-input-8-30b3427bec2a> in <module>()<br>
> ----> 1 a[np.asarray([True, False, True]), np.asarray([True, True,<br>
> True])]<br>
><br>
> IndexError: shape mismatch: indexing arrays could not be broadcast<br>
> together with shapes (2,) (3,)<br>
><br>
><br>
> -n<br>
><br>
> --<br>
> Nathaniel J. Smith -- <a href="http://vorpus.org" target="_blank">http://vorpus.org</a><br>
</div></div><div class=""><div class="h5">> _______________________________________________<br>
> NumPy-Discussion mailing list<br>
> <a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
> <a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
<br>
</div></div><br>_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
<br></blockquote></div><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">What is actually being deprecated?</div><div class="gmail_extra">It looks like there are different examples.</div><div class="gmail_extra"><br></div><div class="gmail_extra">wrong length: Nathaniels first example above, where the mask is not broadcastable to original array because mask is longer or shorter than shape[axis].</div><div class="gmail_extra">I also wouldn't have expected this to work, although I use np.nozero and boolean mask indexing interchangeably, I would assume we need the correct length for the mask.</div><div class="gmail_extra"><br></div><div class="gmail_extra">The second case where the boolean mask has an extra dimension of length one, or several boolean arrays might need more checking.</div><div class="gmail_extra">I'm pretty sure I used various version, assuming they are a feature, and when I see arrays, I usually don't assume "outer product indexing"  (that might lead to a similar discussion as the recent fancy versus orthogonal indexing)</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Josef</div></div>