[Numpy-discussion] ndenumerate for masked arrays
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
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
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