On Fri, Jun 5, 2015 at 11:50 AM, Anne Archibald <[email protected]> wrote:
> > > On Fri, Jun 5, 2015 at 5:45 PM Sebastian Berg <[email protected]> > wrote: > >> On Fr, 2015-06-05 at 08:36 -0400, [email protected] wrote: >> > >> <snip> >> > >> > What is actually being deprecated? >> > It looks like there are different examples. >> > >> > >> > wrong length: Nathaniels first example above, where the mask is not >> > broadcastable to original array because mask is longer or shorter than >> > shape[axis]. >> > 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. >> > >> >> For the moment we are only talking about wrong length (along a given >> dimension). Not about wrong number of dimensions or multiple boolean >> indices. >> > > I am pro-deprecation then, definitely. I don't see a use case for padding > a wrong-shaped boolean array with Falses, and the padding has burned me in > the past. > > It's not orthogonal to the wrong-number-of-dimensions issue, though, > because if your Boolean array has a dimension of length 1, broadcasting > says duplicate it along that axis to match the indexee, and wrong-length > says pad it with Falses. This ambiguity/pitfall disappears if the padding > never happens, and that kind of broadcasting is very useful. > Good argument, now I understand why we only get a single column >>> x = np.arange(4*5).reshape(4,5) >>> mask = np.array([1,0,1,0,1], bool) padding with False, this would also be deprecated AFAIU, and Anna pointed out >>> x[mask[:4][:,None]] array([ 0, 10]) >>> x[mask[None,:]] array([0, 2, 4]) masks can only be combined with slices, so no "fancy masking" allowed nor defined (yet) >>> x[mask[:4][:,None], mask[None,:]] Traceback (most recent call last): File "<pyshell#31>", line 1, in <module> x[mask[:4][:,None], mask[None,:]] IndexError: too many indices for array I'm using 1d masks quite often to select rows or columns, which seems to work in more than two dimensions (Benjamin's surprise) >>> x[:, mask] array([[ 0, 2, 4], [ 5, 7, 9], [10, 12, 14], [15, 17, 19]]) >>> x[mask[:4][:,None] * mask[None,:]] array([ 0, 2, 4, 10, 12, 14]) >>> x[:,:,None][mask[:4][:,None] * mask[None,:]] array([[ 0], [ 2], [ 4], [10], [12], [14]]) Josef > > Anne > > _______________________________________________ > NumPy-Discussion mailing list > [email protected] > http://mail.scipy.org/mailman/listinfo/numpy-discussion > >
_______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
