web-dev-qa-db-ja.com

numpy.cov()例外:「float」オブジェクトには「shape」属性がありません

異なる植物種のデータセットがあり、各種を異なる_np.array_に分離しました。

これらの種からガウスモデルを生成しようとすると、各ラベルの平均と共分散行列を計算する必要がありました。

問題は、ラベルの1つで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'
_

何が間違っているのでしょうか?

11
Mat Gomes

配列が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関数がこれらを適切に処理するわけではありません-この場合のように)。

13
MSeifert