Robert Kern wrote: > HYRY wrote: > >>Why the exec time of test(readdata()) and test(randomdata()) of >>following program is different? >>my test file 150Hz10dB.wav has 2586024 samples, so I set randomdata >>function >>to return a list with 2586024 samples. >>the exec result is: >>2586024 >><type 'list'> >>10.8603842736 >>2586024 >><type 'list'> >>2.16525233979 >>test(randomdata()) is 5x faster than test(readdata()) >>if I remove "from scipy import *" then I get the following result: >>2586024 >><type 'list'> >>2.21851601473 >>2586024 >><type 'list'> >>2.13885042216 >> >>So, what the problem with scipy? > > > You're importing (through scipy) numpy's sum() function. The result type of > that > function is a numpy scalar type. The set of scalar types was introduced for a > number of reasons, mostly having to do with being able to represent the full > range of numerical datatypes that Python does not have builtin types for. > Unfortunately, the code paths that get executed when arithmetic is performed > sith such scalars are still suboptimal; I believe they are still going through > the full ufunc machinery.
This should not be true in the 1.0 release of NumPy. The numpy scalars do their own math which has less overhead than ufunc-based math. But, there is still more overhead than with simple floats because mixed-type arithmetic is handled more generically (the same algorithm covers all the cases). The speed could be improved but hasn't been because it is so easy to get a Python float if you are concerned about speed. -Travis -- http://mail.python.org/mailman/listinfo/python-list