0
votes

Matrice de corrélation Pearson en Python, ValueError

J'essaie d'obtenir une taille de matrice, (lat, lon), avec la valeur du coefficient de Pearson pour chaque point de grille, pour

x: un dataarray 3D (heure, lon) (taille de temps est 30 ) p>

Y: un vecteur de colonne de dataudray avec une série de valeurs de 30 valeurs à l'intérieur P>

Je tiens donc à calculer le coefficient Pearson pour chaque (lat, lon) pour un vecteur de colonne de 30 éléments pour x. p>

J'ai essayé: p> xxx pré>

mais je reçois cette erreur: p>

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()


4 commentaires

Qu'est-ce que Y.Shape ? (Je suppose qu'un objet dataarray a une image attribut .)


Est Pearsonr importé de sciped.stats ? Sinon, où est-il défini?


Désolé j'ai oublié de dire que Y.Shape est (30, 1), donc un vecteur de colonne. Et oui je l'ai fait, j'ai correctement importé Pearsonr de Scipy.Stats


"... Y.Shape est (30, 1), donc un vecteur de colonne." C'est le problème. Voir la réponse @juliangiles.


3 Réponses :


0
votes

En supposant que vous utilisez scipeds.pearsr . Les arguments à Pearsonr doivent être des matrices d'un dimensionnement em>.

Donnez-vous à: P>

corrmap[i, j], p_value = pearsonr(x[:, i, j].ravel(), y)


1 commentaires

Merci beaucoup pour votre réponse. Oui, j'ai correctement importé Pearsonr de Scipy.Stats. Quoi qu'il en soit, faire la correction que vous suggérez (que je comprends et approuvez), je reçois un attributError, en raison du fait que "" dataarray objet "n'a pas d'attribut" Ravel ". Est-ce une erreur d'inizialiser Cormap au début en tant que XR. Dataarray avec une forme (lat, lon)?



1
votes

Le problème est que vous utilisez y code> et il a deux dimensions, PearsonR ne peut pas gérer cela. Spécifier Y [:, 0] code> et fonctionne. C'est-à-dire:

corrmap = np.zeros(((len(corrmap['lat']), len(corrmap['lon'])))

for i in range(len(corrmap['lat'])):
     for j in range(len(corrmap['lon'])):
          corrmap[i, j], p_value = pearsonr(x[:, i, j], y[:,0])


0 commentaires

0
votes

Vous pouvez calculer la Coefficient de corrélation Pearson forte> utilisant:

import numpy
numpy.corrcoef(list1, list2)[0, 1]


0 commentaires