

以下の data(5,10の行列) を直行変換して、対角行列を求めたと考えています。  
しかし、うまく対角行列が得られなくて困っています。

どこか間違っているところはあるでしょうか。よろしくお願いいたします。

**プログラム**

[code]

    #dataの固有値について考える
    #相関行列R
    R = np.corrcoef(data)
    #固有値、固有ベクトル
    w, C = LA.eig(R)
    
    #dataを直行変換したdata_zを求める
    data_z = np.array([])
    for i in range(10):
        z = np.dot(C, np.transpose(data[:, i]))
        data_z = np.append(data_z, z)
    data_z = data_z.reshape(10, 5)
    
    #対角行列rを求めたい
    #しかし、ｒが対角行列にならない
    r = np.dot(z_, np.transpose(z_))
    
[/code]

**対象データ**

[code]

    #data
    array([[-1.43536081,  0.31672281, -0.08760418, -0.7614825 , -0.02021635,
             1.46231594,  1.66447944,  0.58627413, -1.36797298, -0.35715551],
           [-1.40345563, -0.35240956,  1.50237761, -0.4142358 , -1.77441306,
             1.06959394,  0.08037411,  1.0077677 , -0.10510461,  0.38950531],
           [-1.53225887,  0.21367519,  0.18593929, -0.76816204, -0.34940435,
             1.53962792,  1.51869003,  0.71822383, -1.26428114, -0.26204986],
           [-1.37462585,  0.27390587, -0.1306024 , -0.77267902, -0.0641876 ,
             1.49846638,  1.72660423,  0.55160401, -1.31623701, -0.39224862],
           [-1.39815422, -0.36117539,  1.51740696, -0.42272585, -1.75938822,
             1.07351947,  0.07160888,  1.01038282, -0.11428387,  0.38280943]])
    
[/code]


CC BY-SA 4.0
2019-12-03T07:41:21.727
61055
2019-12-03T11:55:14.370
2019-12-03T11:55:14.370
3060
27060
question
python
Pythonでの固有値問題について


複数の問題があります。

  * `data` は非正方行列です。固有値は正方行列でないと存在しないものであり、非正方行列に対しては特異値など他の概念を使うことになります。特に `numpy.linalg.eig` は正方行列に対して使われることが想定されています。
  * コードを見ると `data` の相関行列 `R` の固有ベクトルが `data` の固有ベクトルであるかのように扱われています。
  * そもそも固有値がすべて求まっているのであればそれらを対角要素に並べれば対角化の結果になります。


CC BY-SA 4.0
2019-12-03T09:23:25.867
61061
2019-12-03T09:23:25.867
19110
61055
answer