[Numpy-discussion] Definition of correlation, correlate and so on ?
oliphant.travis at ieee.org
Tue Dec 12 12:30:45 CST 2006
> On 12/12/06, *David Cournapeau* <david at ar.media.kyoto-u.ac.jp
> <mailto:david at ar.media.kyoto-u.ac.jp>> wrote:
> I am polishing some code to compute autocorrelation using fft, and
> when testing the code against numpy.correlate, I realised that I
> am not
> sure about the definition... There are various function related to
> correlation as far as numpy/scipoy is concerned:
> For me, the correlation between two sequences X and Y at lag t is
> the sum(X[i] * Y*[i+lag]) where Y* is the complex conjugate of Y.
> numpy.correlate does not use the conjugate, scipy.signal.correlate as
> well, and I don't understand numpy.corrcoef. I've never seen complex
> correlation used without the conjugate, so I was curious why this
> Neither have I, it is one of those oddities that may have been
> inherited from Numeric. I wouldn't mind seeing it changed but it is
> probably a bit late for that.
It is inherited from Numeric and can't really change. We can move
forward with a different function, however, that uses the conjugate for
complex data. The non-conjugated version is still well-defined,
however. Convolution, for example, is defined without the conjugation,
and the correlate function is the basis for that computation. So, it is
not a good idea to change it.
The scipy.signal.correlate function is a generalization to N-D of the
numpy.correlate function which is 1-d only, the numpy.corrcoef function
is completely different and just computes the correlation coefficients
from the covariance matrix assuming observations of random vectors.
More information about the Numpy-discussion