2012-12-21 5 views
2

Je suis en train de calculer la distance Mahalanobis entre deux vecteurs a et b. Finalement, je vais utiliser cela comme une mesure de distance dans les algorithmes statistiques. J'utilise gsl pour les implémenter. La formule pour la distance de mahalanobis est sqrt ((a-b) 'c^-1 (a-b)), où c est la matrice de covariance. Selon la documentation this gsl, il prend deux ensembles de données et renvoie une valeur de covariance. Je ne suis pas sûr de savoir comment calculer la matrice de covariance en utilisant cela. Toute aide est appréciée.matrice de covariance de GSL

Merci.

Répondre

3

Je pense que vous devez comprendre la calcuation d'une matrice de covariance première, deuxième Heres un exemple de code pour vous aider à démarrer

for (i = 0; i < A->size1; i++) { 
     for (j = i; j < A->size2; j++) { 
      a = gsl_matrix_column (A, i); 
      b = gsl_matrix_column (A, j); 
      double cov = gsl_stats_covariance(a.vector.data, a.vector.stride,b.vector.data, b.vector.stride, a.vector.size); 
      gsl_matrix_set (C, i, j, cov); 
     } 
     } 
+0

Hey merci pour votre réponse. Dans cet extrait de code est A la matrice de données? Parce que dans mon cas, tout ce que j'ai quand la fonction est appelée sont deux vecteurs de la même taille. Donc, je ne sais toujours pas comment obtenir la matrice de covariance entre deux vecteurs. Parce que si j'appelle gsl_stats_covariance entre a et b tout ce que je reçois est une valeur unique. – shaun

+0

yup 'A' est une matrice, et' 'et b' a' des colonnes de la matrice' A' La matrice résultante 'C' est votre matrice de covariance ..... – pyCthon

+2

devrait-il pas' A> size2' deux fois? size1 est le nombre de lignes et vous ne faites pas de boucle sur les lignes. aussi je ne change pas, alors pourquoi ne pas assigner un dans la boucle externe? –

Questions connexes