Python numpy.cov()异常:';浮动';对象没有属性';形状';

Python numpy.cov()异常:';浮动';对象没有属性';形状';,python,arrays,numpy,attributeerror,Python,Arrays,Numpy,Attributeerror,我有一个不同植物物种的数据集,我将每个物种分为不同的np.array 当试图从这些物种中生成高斯模型时,我必须计算每个不同标签的均值和协方差矩阵 问题是:在其中一个标签中使用np.cov()时,该函数会引发错误“'float'对象没有属性'shape'”,我无法真正找出问题的根源。我使用的确切代码行如下所示: covx = np.cov(label0, rowvar=False) 其中label0是一个numpy形状数组(50,3),其中列表示不同的变量,每行是不同的观察值 准确的错误跟踪是:

我有一个不同植物物种的数据集,我将每个物种分为不同的
np.array

当试图从这些物种中生成高斯模型时,我必须计算每个不同标签的均值和协方差矩阵

问题是:在其中一个标签中使用
np.cov()
时,该函数会引发错误“'float'对象没有属性'shape'”,我无法真正找出问题的根源。我使用的确切代码行如下所示:

covx = np.cov(label0, rowvar=False)
其中
label0
是一个numpy形状数组(50,3),其中列表示不同的变量,每行是不同的观察值

准确的错误跟踪是:

---------------------------------------------------------------------------
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'
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
2.
3.获取协方差
---->4 np.cov(label0,rowvar=False)
cov中的C:\Users\Matheus\Anaconda3\lib\site packages\numpy\lib\function\u base.py(m,y,rowvar,bias,ddof,fweights,aweights)
3062 w*=重量
3063
->3064平均值,w_总和=平均值(X,轴=1,权重=w,返回值=True)
3065 w_sum=w_sum[0]
3066
C:\Users\Matheus\Anaconda3\lib\site packages\numpy\lib\function\u base.py平均值(a,轴,权重,返回)
1143
1144如果返回:
->1145如果scl.shape!=平均形状:
1146 scl=np.broadcast_to(scl,avg.shape).copy()
1147返回平均值,scl
AttributeError:“float”对象没有属性“shape”

有什么问题吗?

如果数组是
dtype=object
,那么错误是可以重现的:

import numpy  as np

label0 = np.random.random((50, 3)).astype(object)
np.cov(label0, rowvar=False)
AttributeError:“float”对象没有属性“shape”

如果可能,您应该将其转换为数字类型。例如:

np.cov(label0.astype(float), rowvar=False)  # works
注意:
object
数组很少有用(它们很慢,并且不是所有的NumPy函数都能很好地处理它们,就像在本例中一样),因此检查它的来源并修复它是有意义的。

试试看

    label0.astype(float32)
然后计算你的cov


这可能是因为您的数据类型是object。

label0
似乎是一个浮点值而不是数组。根据的文档,参数每个变量应该有一行,每个观察值应该有一列,而不是相反。@COLDSPEED当我打印label0的类型时说的是np.ndarray。打印出它所说的形状(50,3)。所以它肯定不是一个浮点数,而是一个浮点数数组haha@jdehesa这是默认设置是的,每个变量一行,每个观察值一列。但是,如果您阅读了文档,如果您有所描述的矩阵转置,您可以传递rowvar=False。请确定:什么是
label0.dtype
?A会有帮助的--我们可以运行它来重现错误。马上!其他人已经回复了此修复程序,但由于您给出了一个广告答复,我将更新它。“…检查它来自何处…”如果有疑问,请怀疑熊猫。@MatGomes我很高兴它能工作。如果答案解决了您的问题,请不要忘记给出最有用的答案。