1. ホーム
  2. パイソン

whiten matrix times エラー。TypeError: flexible type で reduce を実行できない。

2022-01-23 22:42:07

私はkmeansでクラスタリングする前にデータを正規化する必要があります。私の行列はデータベースから取得され、変換後、行列を正規化するために白色化を使用すると、エラーが発生します。

トレースバック (最も最近の呼び出し):

  ファイル "<stdin>", 行 1, in <module>

  ファイル "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/cluster/vq.py", 行 133, in whiten

    std_dev = std(obs, axis=0)

  ファイル "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/core/fromnumeric.py", 行 2817, in std

    keepdims=keepdims)

  ファイル "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/core/_methods.py", 行 116, in _std

    keepdims=keepdims)

  ファイル "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/core/_methods.py", 行 86, in _var

    arrmean = um.add.reduce(arr, axis=axis, dtype=dtype, keepdims=True)

TypeError: flexible type で reduce を実行できない。


エラーの主な原因は、最後の文章です。 TypeError: flexible type で reduce を実行できません。

何度も印刷した結果、私の行列はdtypeを持たず、次のように印刷されることがわかりました。

<スパン

array([['1', '25', '1', ... , '0', '1', '9011.92'],

       ['0', '28', '0', ... , '0', '0', '2400'],

       ['1', '34', '1', ... , '0', '1', '1.97'],

       ... , 

       ['1', '31', '1', ... , '0', '1', '0'],

       ['0', '23', '1', ... , '0', '1', '3700'],

       ['0', '41', '1', ... , '0', '1', '3700']], 

      dtype='|S9')

そこで、dtypeの問題だろうと推測し、dtypeについて調べたら、この記事にたどり着き、こう啓発されました。

<スパン http://www.cnblogs.com/hhh5460/p/5129032.html

行列のdtype型はastypeで変更できることがわかったので、試しに自分の行列のdtypeを

points = points.astype(float)

プリントアウトはすべて浮動小数点数です。

>>>プリントポイント

[[ 1.00000000e+00 2.50000000e+01 1.00000000e+00 ... , 0.00000000e+00

    1.00000000e+00 9.01192000e+03]である。

 [ 0.00000000e+00 2.80000000e+01 0.00000000e+00 ... , 0.00000000e+00

    0.00000000e+00 2.40000000e+03] です。

 [ 1.00000000e+00 3.40000000e+01 1.00000000e+00 ... , 0.00000000e+00

    1.00000000e+00 1.97000000e+00]です。

 ... , 

 [ 1.00000000e+00 3.10000000e+01 1.00000000e+00 ... , 0.00000000e+00

    1.00000000e+00 0.00000000e+00]です。

 [ 0.00000000e+00 2.30000000e+01 1.00000000e+00 ... , 0.00000000e+00

    1.00000000e+00 3.70000000e+03]です。

 [ 0.00000000e+00 4.10000000e+01 1.00000000e+00 ... , 0.00000000e+00

    1.00000000e+00 3.70000000e+03]]


whiten関数で再度正規化すると、エラーは報告されない:。

>>> 白色化(ポイント)

array([[ 2.12715108e+00, 2.19163343e+00, 1.25619815e+00, ... ,

          0.00000000e+00, 1.25619815e+00, 7.88747918e-01]です。

       [ 0.00000000e+00, 2.45462944e+00, 0.00000000e+00, .... ,

          0.00000000e+00, 0.00000000e+00, 2.10054573e-01]です。

       [ 2.12715108e+00, 2.98062147e+00, 1.25619815e+00, ...]。,

          0.00000000e+00, 1.25619815e+00, 1.72419795e-04]です。

       ... , 

       [ 2.12715108e+00, 2.71762546e+00, 1.25619815e+00, ... ,

          0.00000000e+00, 1.25619815e+00, 0.00000000e+00]です。

       [ 0.00000000e+00, 2.01630276e+00, 1.25619815e+00, ...]。,

          0.00000000e+00, 1.25619815e+00, 3.23834133e-01]です。

       [ 0.00000000e+00, 3.59427883e+00, 1.25619815e+00, ...]。,

          0.00000000e+00, 1.25619815e+00, 3.23834133e-01]]).





パーフェクト~~~~~。