2017-08-14 35 views
4

我有一個不同植物物種的數據集,並且我將每個物種分爲不同的np.arraynumpy.cov()例外:'float'對象沒有'shape'屬性

當試圖從這些物種中生成高斯模型時,我必須計算每個不同標籤的平均值和協方差矩陣。

問題是:在其中一個標籤中使用np.cov()時,該函數引發錯誤「'float'對象沒有'shape'屬性,我無法確定問題來自何處。的我使用的準確代碼行如下:

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

哪裏label0是形狀(50,3),其中列表示不同的變量的numpy的ndarray和每行是一個不同的觀察。

確切的錯誤軌跡是:

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

什麼錯誤的任何想法?如果數組的dtype=object

+0

'label0'似乎是一個浮點數而不是數組。 –

+0

根據['np.cov']的文檔(https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.cov.html),參數應該每行一行變量和每個觀察一列,而不是相反。 – jdehesa

+0

你的NumPy版本是什麼? – MSeifert

回答

6

的錯誤是重複性:

import numpy as np 

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

AttributeError: 'float' object has no attribute 'shape'

如果可能的話你應該把它轉換爲數值型。例如:

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

注:object數組是很少有用的(他們是緩慢的,不是所有的Nu​​mPy的功能,這些優雅的處理 - 在這種情況下等),所以它可能是有意義的檢查是從哪裏來的,也解決該問題。

+0

現貨!其他人已經回覆了這個問題,但是既然你給了它一個答案,我會更新它。 –

+2

*「...檢查它來自哪裏......」*如有疑問,懷疑熊貓。 –

+0

@MatGomes我很高興它的工作。如果該答案解決了您的問題,請不要忘記[接受](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)最有用的答案。 – MSeifert

相關問題