On 07/18/2017 09:52 AM, Benjamin Root wrote:
This sort of change seems very similar to the np.diag() change a few years ago. Are there lessons we could learn from then that we could apply to here?
Why would the returned view not be a masked array?
Ben Root
I am in favor of the proposed change below.
I'd like to merge it, but before that I want to make sure I understand your comment.
Are you referring to the proposed change to make diag return a view instead of a copy? Note that this has not actually happened yet: https://github.com/numpy/numpy/issues/7661
Also, I think this case is different because it does not change core numpy, rather this is to make the MaskedArray module act more consistently with core numpy. Because of that I think it is much less problematic than the diag changes.
Cheers, Allan
On Tue, Jul 18, 2017 at 9:37 AM, Eric Wieser wieser.eric+numpy@gmail.com wrote:
When using ndarray.squeeze, a view is returned, which means you can do the follow (somewhat-contrived) operation:
def fill_contrived(a):
a.squeeze()[...] = 2 return a
fill_contrived(np.array([1]))
array(2)
However, when tried with a masked array, this can fail, breaking liskov subsitution:
fill_contrived(np.ma.array([1], mask=[True]))
MaskError: Cannot alter the masked element.
This fails because squeeze breaks the contract of returning a view, instead deciding sometimes to return masked.
There is a patch that fixes this in gh-9432 https://github.com/numpy/numpy/pull/9432 - however, by necessity it breaks any existing code that uses m_arr.squeeze() is np.ma.masked.
Is this too breaking a change?
Eric
NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion
NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion