2013-10-17 15 views
29

in MATLAB io usoCome ottenere la correlazione dei due vettori in python

a=[1,4,6] 
b=[1,2,3] 
corr(a,b) 

che restituisce 0,9934. Ho provato numpy.correlate ma restituisce qualcosa di completamente diverso. Qual è il modo più semplice per ottenere la correlazione di due vettori?

+0

veda la risposta @lgautier [ qui] http://stackoverflow.com/a/15026044/1982962) –

+1

Hai provato corrcoef: http: //docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html – Dan

risposta

78

I documenti indicano che numpy.correlate non è quello che stai cercando:

numpy.correlate(a, v, mode='valid', old_behavior=False)[source] 
    Cross-correlation of two 1-dimensional sequences. 
    This function computes the correlation as generally defined in signal processing texts: 
    z[k] = sum_n a[n] * conj(v[n+k]) 
    with a and v sequences being zero-padded where necessary and conj being the conjugate. 

Invece, come gli altri commenti suggerito, siete alla ricerca di un Pearson correlation coefficient. Per fare questo con prova SciPy:

from scipy.stats.stats import pearsonr 
a = [1,4,6] 
b = [1,2,3] 
print pearsonr(a,b) 

Questo dà

(0.99339926779878274, 0.073186395040328034) 

È anche possibile utilizzare numpy.corrcoef:

import numpy 
print numpy.corrcoef(a,b) 

Questo dà:

[[ 1.   0.99339927] 
[ 0.99339927 1.  ]] 
Problemi correlati