【发布时间】:2018-01-22 01:18:12
【问题描述】:
我有一个不同植物物种的数据集,我将每个物种分成不同的np.array。
当尝试从这些物种中生成高斯模型时,我必须计算每个不同标签的均值和协方差矩阵。
问题是:在其中一个标签中使用np.cov() 时,函数会引发错误“'float' object has no attribute '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'
对出了什么问题有任何想法吗?
【问题讨论】:
-
label0似乎是一个浮点数而不是一个数组。 -
根据
np.cov的文档,参数应该是每个变量一行,每个观察一列,而不是相反。 -
@COLDSPEED 当我打印 label0 的类型时说 np.ndarray。打印出它所说的形状(50,3)。所以肯定不是float,而是float数组哈哈
-
@jdehesa 这是默认设置,是的,每个变量一行,每个观察一列。但是,如果你阅读了文档,如果你有描述的矩阵的转置,你可以传递 rowvar=False。
-
只是为了确定:
label0.dtype是什么? minimal, complete and verifiable example 会有所帮助——我们可以运行它来重现错误。
标签: python arrays numpy attributeerror