J'ai un ensemble de données pour différentes espèces de plantes et j'ai séparé chaque espèce en un np.array
Différent.
Lorsque j'ai essayé de générer des modèles gaussiens à partir de ces espèces, j'ai dû calculer les moyennes et les matrices de covariance pour chaque étiquette différente.
Le problème est: lorsque vous utilisez np.cov()
dans l'une des étiquettes, la fonction déclenche l'erreur "l'objet 'float' n'a pas d'attribut 'forme'" et je ne peux pas vraiment comprendre d'où vient le problème . La ligne de code exacte que j'utilise est la suivante:
covx = np.cov(label0, rowvar=False)
Où label0
Est un tableau numérique de forme (50,3), où les colonnes représentent différentes variables et chaque ligne est une observation différente.
La trace d'erreur exacte est:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-81-277aa1d02ff0> in <module>()
2
3 # Get the covariances
----> 4 np.cov(label0, rowvar=False)
C:\Users\Matheus\Anaconda3\lib\site-packages\numpy\lib\function_base.py in cov(m, y, rowvar, bias, ddof, fweights, aweights)
3062 w *= aweights
3063
-> 3064 avg, w_sum = average(X, axis=1, weights=w, returned=True)
3065 w_sum = w_sum[0]
3066
C:\Users\Matheus\Anaconda3\lib\site-packages\numpy\lib\function_base.py in average(a, axis, weights, returned)
1143
1144 if returned:
-> 1145 if scl.shape != avg.shape:
1146 scl = np.broadcast_to(scl, avg.shape).copy()
1147 return avg, scl
AttributeError: 'float' object has no attribute 'shape'
Des idées sur ce qui ne va pas?
L'erreur est reproductible si le tableau est de dtype=object
:
import numpy as np
label0 = np.random.random((50, 3)).astype(object)
np.cov(label0, rowvar=False)
AttributeError: l'objet 'float' n'a pas d'attribut 'shape'
Si possible, vous devez le convertir en type numérique. Par exemple:
np.cov(label0.astype(float), rowvar=False) # works
Remarque: les tableaux object
sont rarement utiles (ils sont lents et toutes les fonctions NumPy ne les traitent pas avec élégance - comme dans ce cas), il pourrait donc être judicieux de vérifier d'où elles viennent et de corriger cela.