반응형
python에서 numpy.linalg를 사용한 후 고유값 및 관련 고유 벡터 정렬
numpy.linalg.eig를 사용하여 고유값과 고유벡터의 목록을 얻고 있습니다.
A = someMatrixArray
from numpy.linalg import eig as eigenValuesAndVectors
solution = eigenValuesAndVectors(A)
eigenValues = solution[0]
eigenVectors = solution[1]
정렬 후 관련 고유 벡터가 무엇인지 알 수 있는 방법으로 고유값(예: 최저값에서 최고값으로)을 정렬하고자 합니다.
파이썬 기능으로 할 수 있는 방법을 찾을 수가 없습니다.간단한 방법이 있나요 아니면 제 정렬 버전을 코딩해야 하나요?
numpy.argsort를 사용합니다.배열 정렬에 사용할 인덱스를 반환합니다.
import numpy as np
import numpy.linalg as linalg
A = np.random.random((3,3))
eigenValues, eigenVectors = linalg.eig(A)
idx = eigenValues.argsort()[::-1]
eigenValues = eigenValues[idx]
eigenVectors = eigenVectors[:,idx]
고유값이 복소수인 경우 정렬 순서는 사전식입니다(즉, 복소수가 실수 부분에 따라 먼저 정렬되고 허수 부분에 의해 관계가 끊어짐).
unutbu의 위 답변은 매우 간결하고 간결합니다.그러나 여기에 더 일반적이고 목록에도 사용할 수 있는 또 다른 방법이 있습니다.
eval, evec = sp.eig(A)
ev_list = zip( eval, evec )
ev_list.sort(key=lambda tup:tup[0], reverse=False)
eval, evec = zip(*ev_list)
이 tup[0]은 정렬 함수가 목록을 정렬하는 고유 값입니다.
reverse = False는 증가하는 순서에 대한 것입니다.
우분투의 코드 조각은 내 파이썬 3.6.5에서 작동하지 않습니다.런타임 오류를 초래합니다.그래서, 저는 그/그녀의 코드를 제 테스트 케이스에 잘 작동하는 이 코드로 리팩터링했습니다.
import numpy as np
from numpy import linalg as npla
#
def eigen(A):
eigenValues, eigenVectors = npla.eig(A)
idx = np.argsort(eigenValues)
eigenValues = eigenValues[idx]
eigenVectors = eigenVectors[:,idx]
return (eigenValues, eigenVectors)
언급URL : https://stackoverflow.com/questions/8092920/sort-eigenvalues-and-associated-eigenvectors-after-using-numpy-linalg-eig-in-pyt
반응형
'programing' 카테고리의 다른 글
FK가 있는 모든 테이블을 다른 테이블로 이동하는 방법은 무엇입니까? (0) | 2023.09.13 |
---|---|
워드프레스에 첨부파일을 첨부하여 이메일을 보내는 방법은? (0) | 2023.09.13 |
How to make an element in XML schema optional? (0) | 2023.09.13 |
액션바의 크기는 픽셀 단위로 어떻게 됩니까? (0) | 2023.09.13 |
Wordpress 플러그인 설치 실패 (0) | 2023.09.13 |