numpy linalg.eig 알고리즘의 아주 이상한 동작을 발견했습니다. python/numpy : numpy가있는 문제 linal.eig
>>> import numpy as np
>>> a = np.array([[1., 0., 0., 0., 0., 0., 0., 0.],
... [0., -1., -0.5, 0., -0.5, 0., 0., 0.],
... [0., -0.5, 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., -0.5, 0.],
... [0., -0.5, 0., 0., 0., 0., 0., 0.],
... [0., 0., 0., 0., 0., 0., -0.5, 0.],
... [0., 0., 0., -0.5, 0., -0.5, -1., 0.],
... [0., 0., 0., 0., 0., 0., 0., 1.]])
>>> np.linalg.eig(a)
(array([-1.366, 0.366, -1.366, 0.366, 0. , 0. , 1. , 1. ]),
array([[ 0. , 0. , 0. , 0. , 0. , 0. , 1. , 0. ],
[-0. , 0. , -0.822, 0.426, 0. , 0. , 0. , 0. ],
[ 0. , 0. , -0.301, -0.581, 0.13 , 0. , 0. , 0. ],
[-0.325, -0.628, -0.123, -0.237, -0.695, -0.707, 0. , 0. ],
[ 0. , 0. , -0.301, -0.581, -0.13 , -0. , 0. , 0. ],
[-0.325, -0.628, -0.123, -0.237, 0.695, 0.707, 0. , 0. ],
[-0.888, 0.46 , -0.336, 0.174, -0. , -0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 1. ]]))
내가 위 (열의) 잘못된 고유 벡터를 얻을 수
을 실행하면.
정답은
>>> np.linalg.eigh(a)
(array([-1.366, -1.366, -0. , 0. , 0.366, 0.366, 1. , 1. ]),
array([[-0. , 0. , 0. , 0. , 0. , -0. , 1. , 0. ],
[-0. , -0.888, 0. , 0. , 0. , -0.46 , 0. , 0. ],
[-0. , -0.325, 0. , -0.707, 0. , 0.628, 0. , 0. ],
[-0.325, 0. , -0.707, 0. , -0.628, -0. , 0. , 0. ],
[ 0. , -0.325, 0. , 0.707, 0. , 0.628, 0. , 0. ],
[-0.325, 0. , 0.707, 0. , -0.628, -0. , 0. , 0. ],
[-0.888, 0. , 0. , 0. , 0.46 , -0. , 0. , 0. ],
[-0. , 0. , 0. , 0. , 0. , -0. , 0. , 1. ]]))
나는 EIG 알고리즘은 간단한 행렬을 대각 수없는 정말 놀랐어요 주어진다!
이 동작을보고해야합니까? 여기에 표시된
편집
NumPy와 버전 1.6.2
당신의 대답은 원칙적으로 올바른 생산하지만, 당신이 그 고유 벡터 사이의 내적을 할 경우는 직교하지 않는 것을 발견! '>>> evals, evecs = np.linalg.eig (a)'' >>> np.dot (evecs [2] evecs [3])'' 0.084518196456252692' – Pie86
는 Pie86 @ 답은 사실적이다 옳은. 다중 고유 값을 가질 때 직교 독립 벡터가 아닌 선형 독립 벡터를 제공하면됩니다. –
선형 고유 독립 공간에 속한 고유 벡터는 (첫 번째 설명의 경우와 같이 다른 고유 값에 해당) 직각이어야한다고 생각합니다 ... 틀린가요? – Pie86