반응형
파이썬에서 numpy.linalg.eig를 사용한 후 고유 값 및 관련 고유 벡터 정렬
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는 오름차순입니다.
우분투의 코드가 Python 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)
반응형
'Development Tip' 카테고리의 다른 글
Gulp로 여러 파일을 복사하고 폴더 구조를 유지하는 방법 (0) | 2020.10.29 |
---|---|
mail () 함수에 대한 오류 메시지를 어떻게 얻을 수 있습니까? (0) | 2020.10.29 |
DOM 객체에 속성을 설정할 때 매개 변수 재 할당을 방지하는 방법 (0) | 2020.10.28 |
ESLint 달러 ($)가 정의되지 않았습니다. (0) | 2020.10.28 |
ArrayList에 Java의 객체가 포함되어 있는지 확인하는 가장 효율적인 방법 (0) | 2020.10.28 |