[Numpy-discussion] ndenumerate for masked arrays

2021-11-05 Thread Jouke Witteveen
Hi all,

Using `np.ndenumerate` on masked arrays gives unexpected results. For instance,

next(np.ndenumerate(np.ma.masked_all((

does *not* equal `((), np.ma.masked)`, but instead contains whatever
value happens to be in the uninitialized data part of the masked
array.

Even better than yielding `((), np.ma.masked)` would be for
`ndenumerate` to skip masked entries altogether. After all, we are
also getting the index of the entries we are iterating over.

I went ahead and implemented this specialization of `ndenumerate` for
masked arrays: https://github.com/numpy/numpy/pull/20020
If there is anything I can do to advance this pull request, please let me know.

Regards,
- Jouke
___
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com


[Numpy-discussion] Re: Putting in `np.ma.ndenumerate` MaskedArray specific ndenumerate

2021-11-18 Thread Jouke Witteveen
On Wed, Nov 17, 2021 at 7:51 PM Andras Deak  wrote:
>
> On Wed, Nov 17, 2021 at 7:39 PM Sebastian Berg  
> wrote:
>>
>> Hi all,
>>
>> the `np.ndenumerate` does not work well for masked arrays (like many
>> main namespace functions, it simply ignores/drops the mask).
>>
>> There is a PR (https://github.com/numpy/numpy/pull/20020) to add a
>> version of it to `np.ma` (masked array specific).  And we thought it
>> seemed reasonable and were planning on putting it in.
>>
>> This version skips all masked elements.  An alternative could be to
>> return `np.ma.masked` for masked elements?
>
> Would it be a bad idea to add a kwarg that specifies this behaviour (i.e. 
> offering both alternatives)? Assuming people might need the masked items to 
> be there under certain circumstances. Perhaps when zipping masked data with 
> dense data?

Just one remark about this. I chose not to yield masked elements,
because it would basically turn the implementation into

for index in np.ndindex(a.shape): yield index, a[index]

Rather than zipping, you could as well iterate over `np.ndindex` and
get the respective items from the dense and masked arrays via
indexing. Really only when skipping masked elements does `ndenumerate`
offer some meaningful MaskedArray-specific functionality.

I'm not saying the alternative behavior should not be supported
(although I personally see little benefit), but the above argument
should at least be convincing that skipping is a useful default.

Regards,
- Jouke
___
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com


[Numpy-discussion] Re: Putting in `np.ma.ndenumerate` MaskedArray specific ndenumerate

2021-11-30 Thread Jouke Witteveen
On Thu, Nov 18, 2021 at 1:46 PM Jouke Witteveen  wrote:
>
> On Wed, Nov 17, 2021 at 7:51 PM Andras Deak  wrote:
> >
> > On Wed, Nov 17, 2021 at 7:39 PM Sebastian Berg  
> > wrote:
> >>
> >> Hi all,
> >>
> >> the `np.ndenumerate` does not work well for masked arrays (like many
> >> main namespace functions, it simply ignores/drops the mask).
> >>
> >> There is a PR (https://github.com/numpy/numpy/pull/20020) to add a
> >> version of it to `np.ma` (masked array specific).  And we thought it
> >> seemed reasonable and were planning on putting it in.
> >>
> >> This version skips all masked elements.  An alternative could be to
> >> return `np.ma.masked` for masked elements?
> >
> > Would it be a bad idea to add a kwarg that specifies this behaviour (i.e. 
> > offering both alternatives)? Assuming people might need the masked items to 
> > be there under certain circumstances. Perhaps when zipping masked data with 
> > dense data?

I appended a commit to the PR that implements the kwarg for optionally
yielding masked elements.

Regards,
- Jouke
___
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com