@@ -1688,6 +1688,8 @@ def test_exception(self):
16881688 interpolation = 'foobar' )
16891689 assert_raises (ValueError , np .percentile , [1 ], 101 )
16901690 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 ])
16911693
16921694 def test_percentile_list (self ):
16931695 assert_equal (np .percentile ([1 , 2 , 3 ], 0 ), 1 )
@@ -1779,26 +1781,85 @@ def test_percentile_overwrite(self):
17791781 b = np .percentile ([2 , 3 , 4 , 1 ], [50 ], overwrite_input = True )
17801782 assert_equal (b , np .array ([2.5 ]))
17811783
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 ))
17821843
17831844
17841845class TestMedian (TestCase ):
17851846 def test_basic (self ):
17861847 a0 = np .array (1 )
17871848 a1 = np .arange (2 )
17881849 a2 = np .arange (6 ).reshape (2 , 3 )
1789- assert_allclose (np .median (a0 ), 1 )
1850+ assert_equal (np .median (a0 ), 1 )
17901851 assert_allclose (np .median (a1 ), 0.5 )
17911852 assert_allclose (np .median (a2 ), 2.5 )
17921853 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 ])
17941855 assert_allclose (np .median (a2 , axis = None ), 2.5 )
17951856
17961857 a = np .array ([0.0444502 , 0.0463301 , 0.141249 , 0.0606775 ])
17971858 assert_almost_equal ((a [1 ] + a [3 ]) / 2. , np .median (a ))
17981859 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 ))
18001861 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 ))
18021863
18031864 def test_axis_keyword (self ):
18041865 a3 = np .array ([[2 , 3 ],
@@ -1872,6 +1933,60 @@ def mean(self, axis=None, dtype=None, out=None):
18721933 a = MySubClass ([1 ,2 ,3 ])
18731934 assert_equal (np .median (a ), - 7 )
18741935
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+
18751990
18761991class TestAdd_newdoc_ufunc (TestCase ):
18771992
0 commit comments