diff options
author | Sebastian Berg <sebastian@sipsolutions.net> | 2014-05-27 11:44:21 +0200 |
---|---|---|
committer | Sebastian Berg <sebastian@sipsolutions.net> | 2014-05-28 20:03:11 +0200 |
commit | 29f9b6e0600cb15f7a846bbc83a46dbac45bd1e9 (patch) | |
tree | c23940b0f056912a6b9c47ea1d99ef4c35af961c /numpy/lib/tests/test_nanfunctions.py | |
parent | c24cc4e36a52d7892817d4f94b8e8ccaa38852b6 (diff) | |
download | numpy-29f9b6e0600cb15f7a846bbc83a46dbac45bd1e9.tar.gz |
BUG: nanpercentile/nanmedian 0-d with output given.
Also some PEP-8 fixes and test improvements
Diffstat (limited to 'numpy/lib/tests/test_nanfunctions.py')
-rw-r--r-- | numpy/lib/tests/test_nanfunctions.py | 111 |
1 files changed, 71 insertions, 40 deletions
diff --git a/numpy/lib/tests/test_nanfunctions.py b/numpy/lib/tests/test_nanfunctions.py index 7f5217221..3fcfca218 100644 --- a/numpy/lib/tests/test_nanfunctions.py +++ b/numpy/lib/tests/test_nanfunctions.py @@ -542,11 +542,41 @@ class TestNanFunctions_Median(TestCase): res = np.nanmedian(mat, axis=axis, out=None, overwrite_input=False) assert_(res.ndim == tgt.ndim) + d = np.ones((3, 5, 7, 11)) + # Randomly set some elements to NaN: + w = np.random.random((4, 200)) * np.array(d.shape)[:, None] + w = w.astype(np.intp) + d[tuple(w)] = np.nan + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter('always', RuntimeWarning) + res = np.nanmedian(d, axis=None, keepdims=True) + assert_equal(res.shape, (1, 1, 1, 1)) + res = np.nanmedian(d, axis=(0, 1), keepdims=True) + assert_equal(res.shape, (1, 1, 7, 11)) + res = np.nanmedian(d, axis=(0, 3), keepdims=True) + assert_equal(res.shape, (1, 5, 7, 1)) + res = np.nanmedian(d, axis=(1,), keepdims=True) + assert_equal(res.shape, (3, 1, 7, 11)) + res = np.nanmedian(d, axis=(0, 1, 2, 3), keepdims=True) + assert_equal(res.shape, (1, 1, 1, 1)) + res = np.nanmedian(d, axis=(0, 1, 3), keepdims=True) + assert_equal(res.shape, (1, 1, 7, 1)) + def test_out(self): - mat = np.random.rand(3,3) + mat = np.random.rand(3, 3) + nan_mat = np.insert(mat, [0, 2], np.nan, axis=1) resout = np.zeros(3) tgt = np.median(mat, axis=1) - res = np.nanmedian(mat, axis=1, out=resout) + res = np.nanmedian(nan_mat, axis=1, out=resout) + assert_almost_equal(res, resout) + assert_almost_equal(res, tgt) + # 0-d output: + resout = np.zeros(()) + tgt = np.median(mat, axis=None) + res = np.nanmedian(nan_mat, axis=None, out=resout) + assert_almost_equal(res, resout) + assert_almost_equal(res, tgt) + res = np.nanmedian(nan_mat, axis=(0, 1), out=resout) assert_almost_equal(res, resout) assert_almost_equal(res, tgt) @@ -599,21 +629,6 @@ class TestNanFunctions_Median(TestCase): assert_raises(IndexError, np.nanmedian, d, axis=(0, 4)) assert_raises(ValueError, np.nanmedian, d, axis=(1, 1)) - def test_keepdims(self): - d = np.ones((3, 5, 7, 11)) - assert_equal(np.nanmedian(d, axis=None, keepdims=True).shape, - (1, 1, 1, 1)) - assert_equal(np.nanmedian(d, axis=(0, 1), keepdims=True).shape, - (1, 1, 7, 11)) - assert_equal(np.nanmedian(d, axis=(0, 3), keepdims=True).shape, - (1, 5, 7, 1)) - assert_equal(np.nanmedian(d, axis=(1,), keepdims=True).shape, - (3, 1, 7, 11)) - assert_equal(np.nanmedian(d, axis=(0, 1, 2, 3), keepdims=True).shape, - (1, 1, 1, 1)) - assert_equal(np.nanmedian(d, axis=(0, 1, 3), keepdims=True).shape, - (1, 1, 7, 1)) - class TestNanFunctions_Percentile(TestCase): @@ -626,15 +641,47 @@ class TestNanFunctions_Percentile(TestCase): def test_keepdims(self): mat = np.eye(3) for axis in [None, 0, 1]: - tgt = np.percentile(mat, 70, axis=axis, out=None, overwrite_input=False) - res = np.percentile(mat, 70, axis=axis, out=None, overwrite_input=False) + tgt = np.percentile(mat, 70, axis=axis, out=None, + overwrite_input=False) + res = np.nanpercentile(mat, 70, axis=axis, out=None, + overwrite_input=False) assert_(res.ndim == tgt.ndim) + d = np.ones((3, 5, 7, 11)) + # Randomly set some elements to NaN: + w = np.random.random((4, 200)) * np.array(d.shape)[:, None] + w = w.astype(np.intp) + d[tuple(w)] = np.nan + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter('always', RuntimeWarning) + res = np.nanpercentile(d, 90, axis=None, keepdims=True) + assert_equal(res.shape, (1, 1, 1, 1)) + res = np.nanpercentile(d, 90, axis=(0, 1), keepdims=True) + assert_equal(res.shape, (1, 1, 7, 11)) + res = np.nanpercentile(d, 90, axis=(0, 3), keepdims=True) + assert_equal(res.shape, (1, 5, 7, 1)) + res = np.nanpercentile(d, 90, axis=(1,), keepdims=True) + assert_equal(res.shape, (3, 1, 7, 11)) + res = np.nanpercentile(d, 90, axis=(0, 1, 2, 3), keepdims=True) + assert_equal(res.shape, (1, 1, 1, 1)) + res = np.nanpercentile(d, 90, axis=(0, 1, 3), keepdims=True) + assert_equal(res.shape, (1, 1, 7, 1)) + def test_out(self): - mat = np.random.rand(3,3) + mat = np.random.rand(3, 3) + nan_mat = np.insert(mat, [0, 2], np.nan, axis=1) resout = np.zeros(3) tgt = np.percentile(mat, 42, axis=1) - res = np.nanpercentile(mat, 42, axis=1, out=resout) + res = np.nanpercentile(nan_mat, 42, axis=1, out=resout) + assert_almost_equal(res, resout) + assert_almost_equal(res, tgt) + # 0-d output: + resout = np.zeros(()) + tgt = np.percentile(mat, 42, axis=None) + res = np.nanpercentile(nan_mat, 42, axis=None, out=resout) + assert_almost_equal(res, resout) + assert_almost_equal(res, tgt) + res = np.nanpercentile(nan_mat, 42, axis=(0, 1), out=resout) assert_almost_equal(res, resout) assert_almost_equal(res, tgt) @@ -642,10 +689,10 @@ class TestNanFunctions_Percentile(TestCase): tgt = [np.percentile(d, 28) for d in _rdat] res = np.nanpercentile(_ndat, 28, axis=1) assert_almost_equal(res, tgt) - tgt = [np.percentile(d, (28,98)) for d in _rdat] - res = np.nanpercentile(_ndat, (28,98), axis=1) + tgt = [np.percentile(d, (28, 98)) for d in _rdat] + res = np.nanpercentile(_ndat, (28, 98), axis=1) assert_almost_equal(res, tgt) - + def test_allnans(self): mat = np.array([np.nan]*9).reshape(3, 3) for axis in [None, 0, 1]: @@ -690,22 +737,6 @@ class TestNanFunctions_Percentile(TestCase): assert_raises(IndexError, np.nanpercentile, d, q=5, axis=(0, 4)) assert_raises(ValueError, np.nanpercentile, d, q=5, axis=(1, 1)) - def test_keepdims(self): - d = np.ones((3, 5, 7, 11)) - assert_equal(np.nanpercentile(d, 90, axis=None, keepdims=True).shape, - (1, 1, 1, 1)) - assert_equal(np.nanpercentile(d, 90, axis=(0, 1), keepdims=True).shape, - (1, 1, 7, 11)) - assert_equal(np.nanpercentile(d, 90, axis=(0, 3), keepdims=True).shape, - (1, 5, 7, 1)) - assert_equal(np.nanpercentile(d, 90, axis=(1,), keepdims=True).shape, - (3, 1, 7, 11)) - assert_equal(np.nanpercentile(d, 90, axis=(0, 1, 2, 3), keepdims=True).shape, - (1, 1, 1, 1)) - assert_equal(np.nanpercentile(d, 90, axis=(0, 1, 3), keepdims=True).shape, - (1, 1, 7, 1)) - - if __name__ == "__main__": run_module_suite() |