異なる植物種のデータセットがあり、各種を異なる_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'
_
何が間違っているのでしょうか?
配列が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関数がこれらを適切に処理するわけではありません-この場合のように)。