[SciPy-dev] reimplementation of lfilter
Sturla Molden
sturla at molden.no
Wed Sep 23 02:10:39 EDT 2009
Sturla Molden skrev:
> Well, I changed all the code to C++, to use the std::complex type,
> std::vector instead of malloc, and templates for specializing the
> filter functions to all dtypes supported by lfilter. I'm quite happy
> with the way the C++ looks :-)
I forgot to add support for the object dtype.
This also fixes a bug in the current signal.lfilter. This will crash the
interpreter:
import numpy as np
import scipy
from scipy.signal import butter, lfilter
b,a = butter(4, .25)
x = np.random.randn(1000000).astype(object).reshape((1000,1000))
fx = lfilter(b,a,x, axis=1)
The C++ version here does not crash on this. :-)
I just ripped some code from current lfilter and cleaned it up slightly;
I hope that is ok. (Cython was not happy about "cdef object *ptr", so I
reluctantly had to put it all in C++.) The reason my code does not
crash like current lfilter, is copy-in copy-out for strided vectors. It
seems lfilter messes up the strides and then segfaults.
<type 'object'>
axis=0, shape=(1000000,), speed: 102
axis=0, shape=(1000, 1000), speed: 105
axis=1, shape=(1000, 1000), scipy.signal.lfilter crashes the interpreter!!!
Building on Windows:
g++ -c -O3 -ffast-math -msse3 -march=core2 -Ic:/Python26/include
-Ic:/Python26/Lib/site-packages/numpy/core/include _linear_filter.cpp
cython.py --cplus linear_filter.pyx
g++ -c -O2 -ffast-math -msse3 -march=core2 -Ic:/Python26/include
-Ic:/Python26/Lib/site-packages/numpy/core/include linear_filter.cpp
g++ -shared -o linear_filter.pyd -Lc:/Python26/libs _linear_filter.o
linear_filter.o -lpython26 -lmsvcr90
Regards,
Sturla Molden
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: _linear_filter.cpp
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20090923/1811e1ff/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: linear_filter.pyx
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20090923/1811e1ff/attachment-0001.ksh>
More information about the SciPy-Dev
mailing list