web-dev-qa-db-fra.com

Comment obtenir une corrélation de deux vecteurs dans python

Dans matlab j'utilise

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

qui retourne .9934. J'ai essayé numpy.correlate mais cela renvoie quelque chose de complètement différent. Quel est le moyen le plus simple d’obtenir la corrélation de deux vecteurs?

64
Luke Makk

La documentation indique que numpy.correlate n'est pas ce que vous recherchez:

_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.
_

Comme le suggèrent les autres commentaires, vous recherchez plutôt un coefficient de corrélation de Pearson . Pour ce faire avec Scipy, essayez:

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

Cela donne

_(0.99339926779878274, 0.073186395040328034)
_

Vous pouvez également utiliser _numpy.corrcoef_:

_import numpy
print numpy.corrcoef(a,b)
_

Cela donne:

_[[ 1.          0.99339927]
 [ 0.99339927  1.        ]]
_
138
Hooked