IT Share you

행렬의 파이썬 역

shareyou 2020. 12. 13. 11:28
반응형

행렬의 파이썬 역


파이썬에서 행렬의 역을 어떻게 얻습니까? 나는 그것을 직접 구현했지만 순수한 파이썬이고 그것을 수행하는 더 빠른 모듈이 있다고 생각합니다.


행렬 조작을한다면 numpy를 봐야 합니다. 이것은 주로 C로 작성된 모듈이며 순수한 파이썬으로 프로그래밍하는 것보다 훨씬 빠릅니다. 다음은 행렬을 반전하고 다른 행렬 조작을 수행하는 방법의 예입니다.

from numpy import matrix
from numpy import linalg
A = matrix( [[1,2,3],[11,12,13],[21,22,23]]) # Creates a matrix.
x = matrix( [[1],[2],[3]] )                  # Creates a matrix (like a column vector).
y = matrix( [[1,2,3]] )                      # Creates a matrix (like a row vector).
print A.T                                    # Transpose of A.
print A*x                                    # Matrix multiplication of A and x.
print A.I                                    # Inverse of A.
print linalg.solve(A, x)     # Solve the linear equation system.

또한 하나의 데이터 유형 만 처리해야 할 때 훨씬 더 효율적인 목록 구현 인 배열 모듈을 살펴볼 수 있습니다 .


매트릭스를 반전시켜야하는지 확인하십시오. 이것은 종종 불필요하며 수치 적으로 불안정 할 수 있습니다. 대부분의 사람들은 행렬을 반전하는 방법을 물을 때 A가 행렬이고 x와 b가 벡터 인 Ax = b를 푸는 방법을 정말로 알고 싶어합니다. A의 역을 계산 한 다음 역에 B를 곱하는 것보다 x에 대한 방정식 Ax = b를 직접 해결하는 코드를 사용하는 것이 더 효율적이고 정확합니다. 많은 b 값에 ​​대해 Ax = b를 해결해야하더라도 좋은 생각은 아닙니다. 여러 b 값에 ​​대해 시스템을 풀어야하는 경우 A의 촐레 스키 분해를 저장하되 반전하지 마십시오.

해당 행렬 반전 안 함을 참조하십시오 .


여기서 다시 반복되는 선택된 행렬이 특이하거나 조건이 나쁜 것은 유감입니다.

A = matrix( [[1,2,3],[11,12,13],[21,22,23]])

정의에 따라 A의 역행렬 A 자체를 곱하면 단위 행렬을 제공해야합니다. 많이 칭찬 된 설명에서 선택된 A는 그렇게하지 않습니다. 사실 그 반대를 보는 것만으로도 반전이 제대로 작동하지 않았다는 단서를 제공합니다. 개별 항의 크기를보세요. 원래 A 행렬의 항에 비해 매우 큽니다 ...

인간이 행렬의 예를 선택할 때 너무 자주 단수 행렬을 선택한다는 것은 놀랍습니다!

솔루션에 문제가있어서 더 자세히 조사했습니다. ubuntu-kubuntu 플랫폼에서 데비안 패키지 numpy에는 매트릭스 및 linalg 하위 패키지가 없으므로 numpy를 가져 오는 것 외에도 scipy도 가져와야합니다.

A의 대 각항에 2와 같이 충분히 큰 인수를 곱하면 행렬은 단수 또는 거의 단수를 멈출 가능성이 큽니다. 그래서

A = matrix( [[2,2,3],[11,24,13],[21,22,46]])

단수도 거의 단수도되지 않으며 예제는 의미있는 결과를 제공합니다. 부동 숫자를 다룰 때 피할 수없는 반올림 오류의 영향을주의해야합니다.

기여해 주셔서 감사합니다.

OldAl.


재귀 행렬의 행렬식을 계산 한 다음 인접 행렬을 형성 할 수 있습니다.

다음은 짧은 튜토리얼입니다.

나는 이것이 정사각형 행렬에서만 작동한다고 생각합니다.

이것들을 계산하는 또 다른 방법은 그램-슈미트 직교 화와 행렬을 전치하는 것입니다. 직교 행렬의 전치는 그 역입니다!


Numpy는 대부분의 사람들에게 적합하지만 Sympy에서 행렬을 수행 할 수도 있습니다.

http://live.sympy.org/ 에서이 명령을 실행 해보십시오.

M = Matrix([[1, 3], [-2, 3]])
M
M**-1

재미를 위해 M**(1/2)


numpy가 싫다면 RPy와 R의 로컬 사본을 꺼내서 대신 사용하십시오.

(행렬을 반전시켜야하도록 에코합니다. 예를 들어 R에서 linalg.solve 및 solve () 함수는 불필요하기 때문에 실제로 완전한 반전을 수행하지 않습니다.)

참고 URL : https://stackoverflow.com/questions/211160/python-inverse-of-a-matrix

반응형