
My answer is yes: the difference between the two behaviors could be confusing for the user. If I can dare to express a "general rule", I would say that the masks in MA arrays should not disappear if not EXPLICITLY required to do so! Of course you can interpret a provided value for the fill_value parameter in the sum function as such a request... but if value is not provided, than I would say that the correct approach would be to keep the mask on (after all, what special about the value 0? For instance, if you have to take logarithm in the next step of the calculation, it is a rather bad choice!) Giulio. "Paul F. Dubois" wrote:
[dubois@ldorritt ~]$ pydoc MA.sum Python Library Documentation: function sum in MA
sum(a, axis=0, fill_value=0) Sum of elements along a certain axis using fill_value for missing.
If you use add.reduce, you'll get what you want.
print m [[1 ,2 ,3 ,-- ,5 ,] [10 ,20 ,30 ,-- ,50 ,]] MA.sum(m) array([11,22,33, 0,55,]) MA.add.reduce(m) array(data = [ 11, 22, 33,-99, 55,], mask = [0,0,0,1,0,], fill_value=-99)
In other words, sum(m, axis, fill_value) = add.reduce(filled(m, fill_value), axis)
Surprising in your case. Still, both uses are quite common, so I probably was thinking to myself that since add.reduce already does one of the jobs, I might as well make sum do the other one. One could have just as well argued that one was a synonym for the other and so it is revolting to have them be different.
Well, MA users, is this something I should change, or not?
-----Original Message----- From: numpy-discussion-admin@lists.sourceforge.net [mailto:numpy-discussion-admin@lists.sourceforge.net] On Behalf Of Sue Giller Sent: Wednesday, November 28, 2001 9:03 AM To: numpy-discussion@lists.sourceforge.net Subject: [Numpy-discussion] Using Reduce with Multi-dimensional Masked array
I posted the following inquiry to python-list@python.org earlier this week, but got no responses, so I thought I'd try a more focused group. I assume MA module falls under NumPy area.
I am using 2 (and more) dimensional masked arrays with some numeric data, and using the reduce functionality on the arrays. I use the masking because some of the values in the arrays are 'missing' and should not be included in the results of the reduction.
For example, assume a 5 x 2 array, with masked values for the 4th entry for both of the 2nd dimension cells. If I want to sum along the 2nd dimension, I would expect to get a 'missing' value for the 4th entry because both of the entries for the sum are 'missing'. Instead, I get 0, which might be a valid number in my data space, and the returned 1 dimensional array has no mask associated with it.
Is this expected behavior for masked arrays or a bug or am I misusing the mask concept? Does anyone know how to get the reduction to produce a masked value?
Example Code:
import MA a = MA.array([[1,2,3,-99,5],[10,20,30,-99,50]]) a [[ 1, 2, 3,-99, 5,] [ 10, 20, 30,-99, 50,]] m = MA.masked_values(a, -99) m array(data = [[ 1, 2, 3,-99, 5,] [ 10, 20, 30,-99, 50,]], mask = [[0,0,0,1,0,] [0,0,0,1,0,]], fill_value=-99)
r = MA.sum(m) r array([11,22,33, 0,55,]) t = MA.getmask(r) print t None
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/numpy-discussion
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/numpy-discussion