Frage numpy.cov () Ausnahme: 'float' Objekt hat kein Attribut 'shape'


Ich habe einen Datensatz für verschiedene Pflanzenarten, und ich habe jede Spezies in eine andere getrennt np.array.

Bei dem Versuch, aus diesen Arten Gauss'sche Modelle zu generieren, musste ich die Mittelwert- und Kovarianzmatrizen für jede einzelne Markierung berechnen.

Das Problem ist: bei der Verwendung np.cov() In einem der Labels löst die Funktion den Fehler "float" -Objekt hat kein Attribut "shape" und ich kann nicht wirklich herausfinden, wo das Problem herkommt. Die genaue Codezeile, die ich verwende, ist die folgende:

covx = np.cov(label0, rowvar=False)

Woher label0 ist ein numpy ndarray der Form (50,3), wo die Spalten verschiedene Variablen darstellen und jede Zeile eine andere Beobachtung ist.

Die genaue Fehlerverfolgung ist:

---------------------------------------------------------------------------
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'

Irgendwelche Ideen, was schief läuft?


7
2017-08-14 08:36


Ursprung


Antworten:


Der Fehler ist reproduzierbar, wenn das Array von ist dtype=object:

import numpy  as np

label0 = np.random.random((50, 3)).astype(object)
np.cov(label0, rowvar=False)

AttributeError: 'float' Objekt hat kein Attribut 'shape'

Wenn möglich, sollten Sie es in einen numerischen Typ konvertieren. Beispielsweise:

np.cov(label0.astype(float), rowvar=False)  # works

Hinweis: object Arrays sind selten nützlich (sie sind langsam und nicht alle NumPy-Funktionen arbeiten elegant mit diesen - wie in diesem Fall), so dass es sinnvoll sein könnte zu überprüfen, woher es kommt und das auch zu beheben.


9
2017-08-14 08:50



Versuchen

    label0.astype(float32)

und dann berechnen Sie Ihre Cov.

Es könnte sein, weil dein dtype Objekt ist.


0
2018-05-08 10:33