103 votes

Comment obtenir la corrélation de deux vecteurs en python

En matlab, j'utilise

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

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

195voto

Hooked Points 16345

Les documents indiquent que numpy.correlate n'est pas ce que vous recherchez:

numpy.correlate(a, v, mode='valid', old_behavior=False)[source]
  Corrélation croisée de deux séquences 1-dimensionnelles.
  Cette fonction calcule la corrélation telle que généralement définie dans les textes de traitement du signal :
     z[k] = sum_n a[n] * conj(v[n+k])
  avec des séquences a et v étant remplis de zéros si nécessaire et conj étant le conjugué.

À la place, comme l'ont suggéré les autres commentaires, vous recherchez 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.        ]]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X