@@ -1688,6 +1688,8 @@ def test_exception(self):
1688
1688
interpolation = 'foobar' )
1689
1689
assert_raises (ValueError , np .percentile , [1 ], 101 )
1690
1690
assert_raises (ValueError , np .percentile , [1 ], - 1 )
1691
+ assert_raises (ValueError , np .percentile , [1 ], list (range (50 )) + [101 ])
1692
+ assert_raises (ValueError , np .percentile , [1 ], list (range (50 )) + [- 0.1 ])
1691
1693
1692
1694
def test_percentile_list (self ):
1693
1695
assert_equal (np .percentile ([1 , 2 , 3 ], 0 ), 1 )
@@ -1779,26 +1781,85 @@ def test_percentile_overwrite(self):
1779
1781
b = np .percentile ([2 , 3 , 4 , 1 ], [50 ], overwrite_input = True )
1780
1782
assert_equal (b , np .array ([2.5 ]))
1781
1783
1784
+ def test_extended_axis (self ):
1785
+ o = np .random .normal (size = (71 , 23 ))
1786
+ x = np .dstack ([o ] * 10 )
1787
+ assert_equal (np .percentile (x , 30 , axis = (0 , 1 )), np .percentile (o , 30 ))
1788
+ x = np .rollaxis (x , - 1 , 0 )
1789
+ assert_equal (np .percentile (x , 30 , axis = (- 2 , - 1 )), np .percentile (o , 30 ))
1790
+ x = x .swapaxes (0 , 1 ).copy ()
1791
+ assert_equal (np .percentile (x , 30 , axis = (0 , - 1 )), np .percentile (o , 30 ))
1792
+ x = x .swapaxes (0 , 1 ).copy ()
1793
+
1794
+ assert_equal (np .percentile (x , [25 , 60 ], axis = (0 , 1 , 2 )),
1795
+ np .percentile (x , [25 , 60 ], axis = None ))
1796
+ assert_equal (np .percentile (x , [25 , 60 ], axis = (0 ,)),
1797
+ np .percentile (x , [25 , 60 ], axis = 0 ))
1798
+
1799
+ d = np .arange (3 * 5 * 7 * 11 ).reshape (3 , 5 , 7 , 11 )
1800
+ np .random .shuffle (d )
1801
+ assert_equal (np .percentile (d , 25 , axis = (0 , 1 , 2 ))[0 ],
1802
+ np .percentile (d [:, :, :, 0 ].flatten (), 25 ))
1803
+ assert_equal (np .percentile (d , [10 , 90 ], axis = (0 , 1 , 3 ))[:, 1 ],
1804
+ np .percentile (d [:, :, 1 , :].flatten (), [10 , 90 ]))
1805
+ assert_equal (np .percentile (d , 25 , axis = (3 , 1 , - 4 ))[2 ],
1806
+ np .percentile (d [:, :, 2 , :].flatten (), 25 ))
1807
+ assert_equal (np .percentile (d , 25 , axis = (3 , 1 , 2 ))[2 ],
1808
+ np .percentile (d [2 , :, :, :].flatten (), 25 ))
1809
+ assert_equal (np .percentile (d , 25 , axis = (3 , 2 ))[2 , 1 ],
1810
+ np .percentile (d [2 , 1 , :, :].flatten (), 25 ))
1811
+ assert_equal (np .percentile (d , 25 , axis = (1 , - 2 ))[2 , 1 ],
1812
+ np .percentile (d [2 , :, :, 1 ].flatten (), 25 ))
1813
+ assert_equal (np .percentile (d , 25 , axis = (1 , 3 ))[2 , 2 ],
1814
+ np .percentile (d [2 , :, 2 , :].flatten (), 25 ))
1815
+
1816
+ def test_extended_axis_invalid (self ):
1817
+ d = np .ones ((3 , 5 , 7 , 11 ))
1818
+ assert_raises (IndexError , np .percentile , d , axis = - 5 , q = 25 )
1819
+ assert_raises (IndexError , np .percentile , d , axis = (0 , - 5 ), q = 25 )
1820
+ assert_raises (IndexError , np .percentile , d , axis = 4 , q = 25 )
1821
+ assert_raises (IndexError , np .percentile , d , axis = (0 , 4 ), q = 25 )
1822
+ assert_raises (ValueError , np .percentile , d , axis = (1 , 1 ), q = 25 )
1823
+
1824
+ def test_keepdims (self ):
1825
+ d = np .ones ((3 , 5 , 7 , 11 ))
1826
+ assert_equal (np .percentile (d , 7 , axis = None , keepdims = True ).shape ,
1827
+ (1 , 1 , 1 , 1 ))
1828
+ assert_equal (np .percentile (d , 7 , axis = (0 , 1 ), keepdims = True ).shape ,
1829
+ (1 , 1 , 7 , 11 ))
1830
+ assert_equal (np .percentile (d , 7 , axis = (0 , 3 ), keepdims = True ).shape ,
1831
+ (1 , 5 , 7 , 1 ))
1832
+ assert_equal (np .percentile (d , 7 , axis = (1 ,), keepdims = True ).shape ,
1833
+ (3 , 1 , 7 , 11 ))
1834
+ assert_equal (np .percentile (d , 7 , (0 , 1 , 2 , 3 ), keepdims = True ).shape ,
1835
+ (1 , 1 , 1 , 1 ))
1836
+ assert_equal (np .percentile (d , 7 , axis = (0 , 1 , 3 ), keepdims = True ).shape ,
1837
+ (1 , 1 , 7 , 1 ))
1838
+
1839
+ assert_equal (np .percentile (d , [1 , 7 ], axis = (0 , 1 , 3 ),
1840
+ keepdims = True ).shape , (2 , 1 , 1 , 7 , 1 ))
1841
+ assert_equal (np .percentile (d , [1 , 7 ], axis = (0 , 3 ),
1842
+ keepdims = True ).shape , (2 , 1 , 5 , 7 , 1 ))
1782
1843
1783
1844
1784
1845
class TestMedian (TestCase ):
1785
1846
def test_basic (self ):
1786
1847
a0 = np .array (1 )
1787
1848
a1 = np .arange (2 )
1788
1849
a2 = np .arange (6 ).reshape (2 , 3 )
1789
- assert_allclose (np .median (a0 ), 1 )
1850
+ assert_equal (np .median (a0 ), 1 )
1790
1851
assert_allclose (np .median (a1 ), 0.5 )
1791
1852
assert_allclose (np .median (a2 ), 2.5 )
1792
1853
assert_allclose (np .median (a2 , axis = 0 ), [1.5 , 2.5 , 3.5 ])
1793
- assert_allclose (np .median (a2 , axis = 1 ), [1 , 4 ])
1854
+ assert_equal (np .median (a2 , axis = 1 ), [1 , 4 ])
1794
1855
assert_allclose (np .median (a2 , axis = None ), 2.5 )
1795
1856
1796
1857
a = np .array ([0.0444502 , 0.0463301 , 0.141249 , 0.0606775 ])
1797
1858
assert_almost_equal ((a [1 ] + a [3 ]) / 2. , np .median (a ))
1798
1859
a = np .array ([0.0463301 , 0.0444502 , 0.141249 ])
1799
- assert_almost_equal (a [0 ], np .median (a ))
1860
+ assert_equal (a [0 ], np .median (a ))
1800
1861
a = np .array ([0.0444502 , 0.141249 , 0.0463301 ])
1801
- assert_almost_equal (a [- 1 ], np .median (a ))
1862
+ assert_equal (a [- 1 ], np .median (a ))
1802
1863
1803
1864
def test_axis_keyword (self ):
1804
1865
a3 = np .array ([[2 , 3 ],
@@ -1872,6 +1933,60 @@ def mean(self, axis=None, dtype=None, out=None):
1872
1933
a = MySubClass ([1 ,2 ,3 ])
1873
1934
assert_equal (np .median (a ), - 7 )
1874
1935
1936
+ def test_extended_axis (self ):
1937
+ o = np .random .normal (size = (71 , 23 ))
1938
+ x = np .dstack ([o ] * 10 )
1939
+ assert_equal (np .median (x , axis = (0 , 1 )), np .median (o ))
1940
+ x = np .rollaxis (x , - 1 , 0 )
1941
+ assert_equal (np .median (x , axis = (- 2 , - 1 )), np .median (o ))
1942
+ x = x .swapaxes (0 , 1 ).copy ()
1943
+ assert_equal (np .median (x , axis = (0 , - 1 )), np .median (o ))
1944
+
1945
+ assert_equal (np .median (x , axis = (0 , 1 , 2 )), np .median (x , axis = None ))
1946
+ assert_equal (np .median (x , axis = (0 , )), np .median (x , axis = 0 ))
1947
+ assert_equal (np .median (x , axis = (- 1 , )), np .median (x , axis = - 1 ))
1948
+
1949
+ d = np .arange (3 * 5 * 7 * 11 ).reshape (3 , 5 , 7 , 11 )
1950
+ np .random .shuffle (d )
1951
+ assert_equal (np .median (d , axis = (0 , 1 , 2 ))[0 ],
1952
+ np .median (d [:, :, :, 0 ].flatten ()))
1953
+ assert_equal (np .median (d , axis = (0 , 1 , 3 ))[1 ],
1954
+ np .median (d [:, :, 1 , :].flatten ()))
1955
+ assert_equal (np .median (d , axis = (3 , 1 , - 4 ))[2 ],
1956
+ np .median (d [:, :, 2 , :].flatten ()))
1957
+ assert_equal (np .median (d , axis = (3 , 1 , 2 ))[2 ],
1958
+ np .median (d [2 , :, :, :].flatten ()))
1959
+ assert_equal (np .median (d , axis = (3 , 2 ))[2 , 1 ],
1960
+ np .median (d [2 , 1 , :, :].flatten ()))
1961
+ assert_equal (np .median (d , axis = (1 , - 2 ))[2 , 1 ],
1962
+ np .median (d [2 , :, :, 1 ].flatten ()))
1963
+ assert_equal (np .median (d , axis = (1 , 3 ))[2 , 2 ],
1964
+ np .median (d [2 , :, 2 , :].flatten ()))
1965
+
1966
+ def test_extended_axis_invalid (self ):
1967
+ d = np .ones ((3 , 5 , 7 , 11 ))
1968
+ assert_raises (IndexError , np .median , d , axis = - 5 )
1969
+ assert_raises (IndexError , np .median , d , axis = (0 , - 5 ))
1970
+ assert_raises (IndexError , np .median , d , axis = 4 )
1971
+ assert_raises (IndexError , np .median , d , axis = (0 , 4 ))
1972
+ assert_raises (ValueError , np .median , d , axis = (1 , 1 ))
1973
+
1974
+ def test_keepdims (self ):
1975
+ d = np .ones ((3 , 5 , 7 , 11 ))
1976
+ assert_equal (np .median (d , axis = None , keepdims = True ).shape ,
1977
+ (1 , 1 , 1 , 1 ))
1978
+ assert_equal (np .median (d , axis = (0 , 1 ), keepdims = True ).shape ,
1979
+ (1 , 1 , 7 , 11 ))
1980
+ assert_equal (np .median (d , axis = (0 , 3 ), keepdims = True ).shape ,
1981
+ (1 , 5 , 7 , 1 ))
1982
+ assert_equal (np .median (d , axis = (1 ,), keepdims = True ).shape ,
1983
+ (3 , 1 , 7 , 11 ))
1984
+ assert_equal (np .median (d , axis = (0 , 1 , 2 , 3 ), keepdims = True ).shape ,
1985
+ (1 , 1 , 1 , 1 ))
1986
+ assert_equal (np .median (d , axis = (0 , 1 , 3 ), keepdims = True ).shape ,
1987
+ (1 , 1 , 7 , 1 ))
1988
+
1989
+
1875
1990
1876
1991
class TestAdd_newdoc_ufunc (TestCase ):
1877
1992
0 commit comments