On Apr 1, 2015 12:55 PM, <josef.pktd@gmail.com> wrote:
>
> On Wed, Apr 1, 2015 at 3:47 PM, Nathaniel Smith <njs@pobox.com> wrote:
> > On Wed, Apr 1, 2015 at 11:34 AM, Jaime Fernández del Río
> > <jaime.frio@gmail.com> wrote:
> >> This question on StackOverflow:
> >>
> >> http://stackoverflow.com/questions/29394377/minimum-of-numpy-array-ignoring-diagonal
> >>
> >> Got me thinking that I had finally found a use for the 'where' kwarg of
> >> ufuncs. Unfortunately it is only provided for the ufunc itself, but not for
> >> any of its methods.
> >>
> >> Is there any fundamental reason these were not implemented back in the day?
> >> Any frontal opposition to having them now?
> >
> > The where= argument stuff was rescued from the last aborted attempt to
> > add missing value support to numpy. The only reason they aren't
> > implemented for the ufunc methods is that Mark didn't get that far.
> >
> > +1 to adding them now.
>
> can you get `where` in ufuncs without missing value support?

where= is implemented since 1.7 iirc, for regular ufunc calls. I.e. you can currently do np.add(a, b, where=mask), but not np.add.reduce(a, b, where=mask).

> what's the result for ufuncs that are not reduce operations?

The operation skips over any entries where the mask is false. So if you pass an out= array, the masked out entries will remain unchanged from before the call; if you don't pass an out= array then one will be allocated for you as if by calling np.empty, and then the masked out entries will remain uninitialized.

> what's the result for reduce operations along an axis if there is
> nothing there (in a row or column or ...)?

The same as a reduce operation on a zero length axis: the identity if the ufunc has one, and an error otherwise.

-n