[SciPy-user] Help on performance of signal.convolve
Yichun Wei
yichunwe at usc.edu
Wed Jan 12 14:53:25 EST 2005
Dear Experts,
Sorry if I was not concrete or even not correct last time I posted this
for help.
I'd like to convolve a (64,64,41) kernel with a (64,64,1800)
array with mode='valid' . What would be the fastest method in scipy?
Here I tried with signal.convolve and it takes >400 s to solve.
a.shape is (64,64,41), b.shape is (64,64,1800)
res = signal.convolve (a, b, mode='valid')
it took around 420 s CPU time to solve on my P-IV 1.8G CPU. I have the
file dumped from profile, if you want to have a look I can attach it.
'same' and 'full' never ends when I ran them. I am using the Enthought
Python with scipy 0.3. Is this performance normal on a P-IV 1.8G CPU?
>>> p.sort_stats('cumulative').print_stats(10)
Wed Jan 12 11:31:08 2005 Profile_k_GetRespons_same
1631 function calls (1623 primitive calls) in 420.407 CPU seconds
Ordered by: cumulative time
List reduced from 175 to 10 due to restriction <10>
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.001 0.001 420.407 420.407 profile:0(res =
k.GetResponse())
1 0.000 0.000 420.406 420.406 <string>:1(?)
1 0.000 0.000 420.406 420.406
F:\tmp\py\cte\kernel.py:173(GetResponse)
1 419.705 419.705 419.705 419.705
C:\Python23\Lib\site-packages\scipy\signal\signaltools.py:79(convolve)
5/1 0.000 0.000 0.701 0.701
C:\Python23\Lib\site-packages\scipy_base\ppimport.py:299(__getattr__)
5/1 0.033 0.007 0.701 0.701
C:\Python23\Lib\site-packages\scipy_base\ppimport.py:252(_ppimport_importer)
1 0.091 0.091 0.699 0.699
C:\Python23\Lib\site-packages\scipy\signal\__init__.py:5(?)
1 0.000 0.000 0.395 0.395
C:\Python23\Lib\site-packages\scipy\signal\signaltools.py:4(?)
1 0.091 0.091 0.313 0.313
C:\Python23\Lib\site-packages\scipy\stats\__init__.py:5(?)
1 0.019 0.019 0.196 0.196
C:\Python23\Lib\site-packages\scipy\signal\bsplines.py:1(?)
<pstats.Stats instance at 0x007E9DA0>
I read some performance guide like the one by Prabhu at
http://www.scipy.org/documentation/weave/weaveperformance.html. But
since this is only a function call to sigtools._correlateND, I think it
is already implemented in C++. If it is the case, I think it is not
profitable to use blitz, swig or f2py.
Also, I find there is a fftpack.convolve, however I am not sure if it
works only on 1-d array, or if it is appropriate to use fft in this
convolution I will do. (I also find in numarray the convolution object
got an option to decide whether or not to use fft.)
Could you be kind enought to point out where the effort should be put to
improve the performance of such a convolution? Any hint will be greatly
appreciated!!
- yichun
More information about the SciPy-User
mailing list