Python cross correlation

Simon picture Simon · Sep 14, 2014 · Viewed 22k times · Source

I have a pair of 1D arrays (of different lengths) like the following:

data1 = [0,0,0,1,1,1,0,1,0,0,1]
data2 = [0,1,1,0,1,0,0,1]

I would like to get the max cross correlation of the 2 series in python. In matlab, the xcorr() function will return it OK

I have tried the following 2 methods:

  1. numpy.correlate(data1, data2)
  2. signal.fftconvolve(data2, data1[::-1], mode='full')

Both methods give me the same values, but the values I get from python are different from what comes out of matlab. Python gives me integers values > 1, whereas matlab gives actual correlation values between 0 and 1.

I have tried normalizing the 2 arrays first (value-mean/SD), but the cross correlation values I get are in the thousands which doesnt seem correct.

Matlab will also give you a lag value at which the cross correlation is the greatest. I assume it is easy to do this using indices but whats the most appropriate way of doing this if my arrays contain 10's of thousands of values?

I would like to mimic the xcorr() function that matlab has, any thoughts on how I would do that in python?

Answer

Cheeku picture Cheeku · Oct 5, 2014
numpy.correlate(arr1,arr2,"full")

gave me same output as

xcorr(arr1,arr2)

gives in matlab