Stride of 2 for correlate()
Greetings, After searching the archives, I was unable to find a good method for changing the stride of the correlate or convolve routines. I am doing a Daubechies analysis of some sample data, say data = arange(0:80). The coefficient array or four floats (say daub_g2[0:4]) is correlated over the data. However, the product only needs to be calculated for every other data index. For example, I need to take the inner product of: data[0:4] with daub_g2[0:4] then data[2:6] with daub_g2[0:4] then data[4:8] with daub_g2[0:4] and so on. You help is greatly appreciated, Chris
On 05/02/2008, Chris Finley <cfinley@u.washington.edu> wrote:
After searching the archives, I was unable to find a good method for changing the stride of the correlate or convolve routines. I am doing a Daubechies analysis of some sample data, say data = arange(0:80). The coefficient array or four floats (say daub_g2[0:4]) is correlated over the data. However, the product only needs to be calculated for every other data index.
I don't think that correlate or convolve can be made to behave this way. You can of course just throw away half the values, but I imagine you'd like it to be reasonably fast (do compare, though, speed tradeoffs can be surprising, particularly in python). This sort of thing comes up from time to time, so I took some old code I posted to scipy-user and put it in the cookbook at http://www.scipy.org/Cookbook/SegmentAxis . It works by converting your input array into a (in this case) 4 by n matrix with overlapping rows (without copying). You can then do what you like with the resulting array; convolutions just become matrix products. It's conceivable (though frankly unlikely) that the BLAS acceleration of matrix multiplication might make this run faster than correlate(). Good luck, Anne
participants (2)
-
Anne Archibald -
Chris Finley