diff options
author | pierregm <pierregm@localhost> | 2009-08-06 17:00:23 +0000 |
---|---|---|
committer | pierregm <pierregm@localhost> | 2009-08-06 17:00:23 +0000 |
commit | 0a786652b3824a239503ddd4a5392263d73c3376 (patch) | |
tree | b0b3cb3326c8994925f9e3fd94d0bf22b7b21654 /numpy/ma | |
parent | d0bba527fa3ade5674c670b6df1d7ad0346603c1 (diff) | |
download | numpy-0a786652b3824a239503ddd4a5392263d73c3376.tar.gz |
* fixed np.ma.average on integersw/ mask (bug #1188)
Diffstat (limited to 'numpy/ma')
-rw-r--r-- | numpy/ma/core.py | 13 | ||||
-rw-r--r-- | numpy/ma/extras.py | 2 | ||||
-rw-r--r-- | numpy/ma/tests/test_extras.py | 55 |
3 files changed, 32 insertions, 38 deletions
diff --git a/numpy/ma/core.py b/numpy/ma/core.py index 851f753b7..3071ff5fe 100644 --- a/numpy/ma/core.py +++ b/numpy/ma/core.py @@ -4921,19 +4921,6 @@ class _frommethod: # Still here ? OK, let's call the corresponding np function method = getattr(np, method_name) return method(a, *args, **params) -# if isinstance(a, MaskedArray): -# return getattr(a, self.__name__).__call__(*args, **params) -# #FIXME ---- -# #As x is not a MaskedArray, we transform it to a ndarray with asarray -# #... and call the corresponding method. -# #Except that sometimes it doesn't work (try reshape([1,2,3,4],(2,2))) -# #we end up with a "SystemError: NULL result without error in PyObject_Call" -# #A dirty trick is then to call the initial numpy function... -# method = getattr(narray(a, copy=False), self.__name__) -# try: -# return method(*args, **params) -# except SystemError: -# return getattr(np,self.__name__).__call__(a, *args, **params) all = _frommethod('all') anomalies = anom = _frommethod('anom') diff --git a/numpy/ma/extras.py b/numpy/ma/extras.py index d4b78f986..9c6b7d66c 100644 --- a/numpy/ma/extras.py +++ b/numpy/ma/extras.py @@ -413,7 +413,7 @@ def average(a, axis=None, weights=None, returned=False): else: if weights is None: n = a.filled(0).sum(axis=None) - d = umath.add.reduce((-mask).ravel().astype(int)) + d = float(umath.add.reduce((~mask).ravel())) else: w = array(filled(weights, 0.0), float, mask=mask).ravel() n = add.reduce(a.ravel() * w) diff --git a/numpy/ma/tests/test_extras.py b/numpy/ma/tests/test_extras.py index e40c56ed5..c0532b081 100644 --- a/numpy/ma/tests/test_extras.py +++ b/numpy/ma/tests/test_extras.py @@ -94,19 +94,19 @@ class TestAverage(TestCase): "Several tests of average. Why so many ? Good point..." def test_testAverage1(self): "Test of average." - ott = array([0.,1.,2.,3.], mask=[1,0,0,0]) - assert_equal(2.0, average(ott,axis=0)) + ott = array([0.,1.,2.,3.], mask=[True, False, False, False]) + assert_equal(2.0, average(ott, axis=0)) assert_equal(2.0, average(ott, weights=[1., 1., 2., 1.])) - result, wts = average(ott, weights=[1.,1.,2.,1.], returned=1) + result, wts = average(ott, weights=[1., 1., 2., 1.], returned=1) assert_equal(2.0, result) self.failUnless(wts == 4.0) ott[:] = masked - assert_equal(average(ott,axis=0).mask, [True]) - ott = array([0.,1.,2.,3.], mask=[1,0,0,0]) - ott = ott.reshape(2,2) + assert_equal(average(ott, axis=0).mask, [True]) + ott = array([0., 1., 2., 3.], mask=[True, False, False, False]) + ott = ott.reshape(2, 2) ott[:,1] = masked - assert_equal(average(ott,axis=0), [2.0, 0.0]) - assert_equal(average(ott,axis=1).mask[0], [True]) + assert_equal(average(ott, axis=0), [2.0, 0.0]) + assert_equal(average(ott, axis=1).mask[0], [True]) assert_equal([2.,0.], average(ott, axis=0)) result, wts = average(ott, axis=0, returned=1) assert_equal(wts, [1., 0.]) @@ -122,43 +122,44 @@ class TestAverage(TestCase): assert_equal(average(y, None), np.add.reduce(np.arange(6))*3./12.) assert_equal(average(y, axis=0), np.arange(6) * 3./2.) assert_equal(average(y, axis=1), - [average(x,axis=0), average(x,axis=0) * 2.0]) + [average(x, axis=0), average(x, axis=0) * 2.0]) assert_equal(average(y, None, weights=w2), 20./6.) assert_equal(average(y, axis=0, weights=w2), [0.,1.,2.,3.,4.,10.]) assert_equal(average(y, axis=1), - [average(x,axis=0), average(x,axis=0) * 2.0]) + [average(x, axis=0), average(x, axis=0) * 2.0]) m1 = zeros(6) - m2 = [0,0,1,1,0,0] - m3 = [[0,0,1,1,0,0],[0,1,1,1,1,0]] + m2 = [0, 0, 1, 1, 0, 0] + m3 = [[0, 0, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0]] m4 = ones(6) m5 = [0, 1, 1, 1, 1, 1] - assert_equal(average(masked_array(x, m1),axis=0), 2.5) - assert_equal(average(masked_array(x, m2),axis=0), 2.5) - assert_equal(average(masked_array(x, m4),axis=0).mask, [True]) - assert_equal(average(masked_array(x, m5),axis=0), 0.0) - assert_equal(count(average(masked_array(x, m4),axis=0)), 0) + assert_equal(average(masked_array(x, m1), axis=0), 2.5) + assert_equal(average(masked_array(x, m2), axis=0), 2.5) + assert_equal(average(masked_array(x, m4), axis=0).mask, [True]) + assert_equal(average(masked_array(x, m5), axis=0), 0.0) + assert_equal(count(average(masked_array(x, m4), axis=0)), 0) z = masked_array(y, m3) assert_equal(average(z, None), 20./6.) assert_equal(average(z, axis=0), [0.,1.,99.,99.,4.0, 7.5]) assert_equal(average(z, axis=1), [2.5, 5.0]) - assert_equal(average(z,axis=0, weights=w2), [0.,1., 99., 99., 4.0, 10.0]) + assert_equal(average(z,axis=0, weights=w2), + [0.,1., 99., 99., 4.0, 10.0]) def test_testAverage3(self): "Yet more tests of average!" a = arange(6) b = arange(6) * 3 - r1, w1 = average([[a,b],[b,a]], axis=1, returned=1) + r1, w1 = average([[a, b], [b, a]], axis=1, returned=1) assert_equal(shape(r1) , shape(w1)) assert_equal(r1.shape , w1.shape) - r2, w2 = average(ones((2,2,3)), axis=0, weights=[3,1], returned=1) + r2, w2 = average(ones((2, 2, 3)), axis=0, weights=[3, 1], returned=1) assert_equal(shape(w2) , shape(r2)) - r2, w2 = average(ones((2,2,3)), returned=1) + r2, w2 = average(ones((2, 2, 3)), returned=1) assert_equal(shape(w2) , shape(r2)) - r2, w2 = average(ones((2,2,3)), weights=ones((2,2,3)), returned=1) + r2, w2 = average(ones((2, 2, 3)), weights=ones((2, 2, 3)), returned=1) assert_equal(shape(w2), shape(r2)) - a2d = array([[1,2],[0,4]], float) - a2dm = masked_array(a2d, [[0,0],[1,0]]) + a2d = array([[1, 2], [0, 4]], float) + a2dm = masked_array(a2d, [[False, False],[True, False]]) a2da = average(a2d, axis=0) assert_equal(a2da, [0.5, 3.0]) a2dma = average(a2dm, axis=0) @@ -168,6 +169,12 @@ class TestAverage(TestCase): a2dma = average(a2dm, axis=1) assert_equal(a2dma, [1.5, 4.0]) + def test_onintegers_with_mask(self): + "Test average on integers with mask" + a = average(array([1, 2])) + assert_equal(a, 1.5) + a = average(array([1, 2, 3, 4], mask=[False, False, True, True])) + assert_equal(a, 1.5) class TestConcatenator(TestCase): |