summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorpierregm <pierregm@localhost>2009-08-06 17:00:23 +0000
committerpierregm <pierregm@localhost>2009-08-06 17:00:23 +0000
commit0a786652b3824a239503ddd4a5392263d73c3376 (patch)
treeb0b3cb3326c8994925f9e3fd94d0bf22b7b21654 /numpy
parentd0bba527fa3ade5674c670b6df1d7ad0346603c1 (diff)
downloadnumpy-0a786652b3824a239503ddd4a5392263d73c3376.tar.gz
* fixed np.ma.average on integersw/ mask (bug #1188)
Diffstat (limited to 'numpy')
-rw-r--r--numpy/ma/core.py13
-rw-r--r--numpy/ma/extras.py2
-rw-r--r--numpy/ma/tests/test_extras.py55
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):