Re: [Numpy-discussion] Fix masked arrays to properly edit views
Hey Eric, That's a good point. I remember seeing this behavior before and thought it was a bit odd. Best, John
On Mar 16, 2015, at 2:20 AM, numpy-discussion-request@scipy.org wrote:
Send NumPy-Discussion mailing list submissions to numpy-discussion@scipy.org
To subscribe or unsubscribe via the World Wide Web, visit http://mail.scipy.org/mailman/listinfo/numpy-discussion or, via email, send a message with subject or body 'help' to numpy-discussion-request@scipy.org
You can reach the person managing the list at numpy-discussion-owner@scipy.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of NumPy-Discussion digest..."
Today's Topics:
1. Re: Fix masked arrays to properly edit views (Eric Firing) 2. Rewrite np.histogram in c? (Robert McGibbon) 3. numpy.stack -- which function, if any, deserves the name? (Stephan Hoyer) 4. Re: Rewrite np.histogram in c? (Jaime Fern?ndez del R?o) 5. Re: Rewrite np.histogram in c? (Robert McGibbon) 6. Re: Rewrite np.histogram in c? (Robert McGibbon)
----------------------------------------------------------------------
Message: 1 Date: Sat, 14 Mar 2015 14:01:04 -1000 From: Eric Firing
Subject: Re: [Numpy-discussion] Fix masked arrays to properly edit views To: numpy-discussion@scipy.org Message-ID: <5504CBC0.1080502@hawaii.edu> Content-Type: text/plain; charset=windows-1252; format=flowed On 2015/03/14 1:02 PM, John Kirkham wrote: The sample case of the issue ( https://github.com/numpy/numpy/issues/5558 ) is shown below. A proposal to address this behavior can be found here ( https://github.com/numpy/numpy/pull/5580 ). Please give me your feedback.
I tried to change the mask of `a` through a subindexed view, but was unable. Using this setup I can reproduce this in the 1.9.1 version of NumPy.
import numpy as np
a = np.arange(6).reshape(2,3) a = np.ma.masked_array(a, mask=np.ma.getmaskarray(a), shrink=False)
b = a[1:2,1:2]
c = np.zeros(b.shape, b.dtype) c = np.ma.masked_array(c, mask=np.ma.getmaskarray(c), shrink=False) c[:] = np.ma.masked
This yields what one would expect for `a`, `b`, and `c` (seen below).
masked_array(data = [[0 1 2] [3 4 5]], mask = [[False False False] [False False False]], fill_value = 999999)
masked_array(data = [[4]], mask = [[False]], fill_value = 999999)
masked_array(data = [[--]], mask = [[ True]], fill_value = 999999)
Now, it would seem reasonable that to copy data into `b` from `c` one can use `__setitem__` (seen below).
b[:] = c
This results in new data and mask for `b`.
masked_array(data = [[--]], mask = [[ True]], fill_value = 999999)
This should, in turn, change `a`. However, the mask of `a` remains unchanged (seen below).
masked_array(data = [[0 1 2] [3 0 5]], mask = [[False False False] [False False False]], fill_value = 999999)
I agree that this behavior is wrong. A related oddity is this:
In [24]: a = np.arange(6).reshape(2,3) In [25]: a = np.ma.array(a, mask=np.ma.getmaskarray(a), shrink=False) In [27]: a.sharedmask True In [28]: a.unshare_mask() In [30]: b = a[1:2, 1:2] In [31]: b[:] = np.ma.masked In [32]: b.sharedmask False In [33]: a masked_array(data = [[0 1 2] [3 -- 5]], mask = [[False False False] [False True False]], fill_value = 999999)
It looks like the sharedmask property simply is not being set and interpreted correctly--a freshly initialized array has sharedmask True; and after setting it to False, changing the mask of a new view *does* change the mask in the original.
Eric
Best, John
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
------------------------------
Message: 2 Date: Sun, 15 Mar 2015 21:32:49 -0700 From: Robert McGibbon
Subject: [Numpy-discussion] Rewrite np.histogram in c? To: Discussion of Numerical Python Message-ID: Content-Type: text/plain; charset="utf-8" Hi,
Numpy.histogram is implemented in python, and is a little sluggish. This has been discussed previously on the mailing list, [1, 2]. It came up in a project that I maintain, where a new feature is bottlenecked by numpy.histogram, and one developer suggested a faster implementation in cython [3].
Would it make sense to reimplement this function in c? or cython? Is moving functions like this from python to c to improve performance within the scope of the development roadmap for numpy? I started implementing this a little bit in c, [4] but I figured I should check in here first.
-Robert
[1] http://scipy-user.10969.n7.nabble.com/numpy-histogram-is-slow-td17208.html [2] http://numpy-discussion.10968.n7.nabble.com/Fast-histogram-td9359.html [3] https://github.com/mdtraj/mdtraj/pull/734 [4] https://github.com/rmcgibbo/numpy/tree/histogram
participants (1)
-
John Kirkham