Ciao Sarah > cross_correlate, but given two arrays, that function returns a single > scalar value (whereas I was expecting a list of correlation > coefficients corresponding to how well the two signals match on > successive lags).
That's not really a mpl question, more a 'numerix' one: what does your numerix stand for ? numpy ? numarray ? For numpy, I guess that the corresponding function is 'correlate', which you must use with the 'full' parameter: >>>corxy = N.correlate(x, y, 'full') Unless I'm mistaken, the lags are then 1-n, 2-n,..., -1, 0, 1, ..., n-1 Note that you may want to use anomalies (ie, x-x.mean() and y-y.mean()), and divide by the variances to get proper coefficients A second possibility is to use FFTs, >>>Fx = N.fft.fft(x, npad, axis=axis) >>>Fy = N.fft.fft(y, npad, axis=axis) >>>iFxy = N.fft.ifft(Fx.conj()*Fy,n=npad,axis=axis).real with npad=x.size+y.size The lags are then 0,1,2,...,n,1-n,...,-1 If you're interested, you can use these two functions that I had written #.............................................................................. def ccf(x, y, axis=None): """Computes the cross-correlation function of two series `x` and `y`. Note that the computations are performed on anomalies (deviations from average). Returns the values of the cross-correlation at different lags. Lags are given as [0,1,2,...,n,n-1,n-2,...,-2,-1]. :Parameters: `x` : 1D MaskedArray Time series. `y` : 1D MaskedArray Time series. `axis` : integer *[None]* Axis along which to compute (0 for rows, 1 for cols). If `None`, the array is flattened first. """ assert(x.ndim == y.ndim, "Inconsistent shape !") # assert(x.shape == y.shape, "Inconsistent shape !") if axis is None: if x.ndim > 1: x = x.ravel() y = y.ravel() npad = x.size + y.size xanom = (x - x.mean(axis=None)) yanom = (y - y.mean(axis=None)) Fx = N.fft.fft(xanom, npad, ) Fy = N.fft.fft(yanom, npad, ) iFxy = N.fft.ifft(Fx.conj()*Fy).real varxy = N.sqrt(N.inner(xanom,xanom) * N.inner(yanom,yanom)) else: npad = x.shape[axis] + y.shape[axis] if axis == 1: if x.shape[0] != y.shape[0]: raise ValueError, "Arrays should have the same length!" xanom = (x - x.mean(axis=1)[:,None]) yanom = (y - y.mean(axis=1)[:,None]) varxy = N.sqrt((xanom*xanom).sum(1) * (yanom*yanom).sum(1)) [:,None] else: if x.shape[1] != y.shape[1]: raise ValueError, "Arrays should have the same width!" xanom = (x - x.mean(axis=0)) yanom = (y - y.mean(axis=0)) varxy = N.sqrt((xanom*xanom).sum(0) * (yanom*yanom).sum(0)) Fx = N.fft.fft(xanom, npad, axis=axis) Fy = N.fft.fft(yanom, npad, axis=axis) iFxy = N.fft.ifft(Fx.conj()*Fy,n=npad,axis=axis).real # return iFxy/varxy #.............................................................................. def ccf1d(x,y): """Computes the crosscorrelation of two flat arrays `x` and `y`, with the numpy.correlate function. Note that the computations are performed on anomalies (deviations from average). """ if x.ndim > 1: x = x.ravel() if y.ndim > 1: y = y.ravel() (xanom, yanom) = (x-x.mean(), y-y.mean()) corxy = N.correlate(xanom, yanom, 'full') n = min(x.size, y.size) # return N.r_[ xc[len(yf)-1:], 0, xc[:len(yf)-1] ] corxy = N.r_[ corxy[:n][::-1], 0, corxy[n:][::-1] ] varxy = N.sqrt(N.inner(xanom,xanom) * N.inner(yanom,yanom)) return corxy/varxy > > So ... does matplotlib have something akin to what I'm after or is > there an extention that might have it? > > Very many thanks, > > Sarah > > (*) > > http://www.mathworks.com/access/helpdesk/help/toolbox/garch/index.html?/acc >ess/helpdesk/help/toolbox/garch/crosscorr.html > http://www.mathworks.com/access/helpdesk/help/toolbox/signal/index.html?/ac >cess/helpdesk/help/toolbox/signal/xcorr.html ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users