[Numpy-discussion] another performance problem

Travis Oliphant oliphant.travis at ieee.org
Sun Jan 29 17:17:07 CST 2006


Gerard Vermeulen wrote:

>Hi Travis,
>
>max and min are really slow in numpy:
>
>  
>
>>>>from timeit import Timer
>>>>import Numeric; Numeric.__version__
>>>>        
>>>>
>'23.1'
>  
>
>>>>import numarray; numarray.__version__
>>>>        
>>>>
>'1.2.3'
>  
>
>>>>import numpy; numpy.__version__
>>>>        
>>>>
>'0.9.5.2021'
>  
>
>>>>t1 = Timer('a = max(b)', 'import Numeric as N; b=N.cos(N.arange(0, 10**5, 1, N.Float))')
>>>>t2 = Timer('a = max(b)', 'import numarray as N; b=N.cos(N.arange(0, 10**5, 1, N.Float))')
>>>>t3 = Timer('a = max(b)', 'import numpy as N; b=N.cos(N.arange(0, 10**5, 1, N.Float))')
>>>>t1.timeit(10)
>>>>        
>>>>
>0.13748002052307129
>  
>
>>>>t2.timeit(10)
>>>>        
>>>>
>0.64549708366394043
>  
>
>>>>t3.timeit(10)
>>>>        
>>>>
>4.5433549880981445
>  
>
You shouldn't be using max(b)!!!

You should use b.max()  because  max is a Python function that is using 
the generic sequence interface to do the comparisons.  Very likely it is 
slower because in numpy you get an array scalar (which don't yet have 
their own math defined and so use the full ufunc machinery do to 
computations).

At some point the array scalars will have their own math defined and 
should be as fast as the Python scalars, so this particular "slowness" 
will go away.  But, you use maximum.reduce() instead anyway.

-Travis





More information about the Numpy-discussion mailing list