Numpy에서 선형대수에 관련된 하위 모듈은 linalg이다. 예를 들어 역행렬을 구하는 함수 inv를 사용하려면 다음과 같이 함수 이름 앞에 linalg를 붙여주거나
>>> from numpy import *
>>> A = mat("[1 2; 3 4]")
>>> linalg.inv(A)
matrix([[-2. , 1. ],
[ 1.5, -0.5]])
또는 linalg 라이브러리를 모두 불러들인다.
>>> from numpy import *
>>> from numpy.linalg import *
>>> A = mat("[1 2; 3 4]")
>>> inv(A)
matrix([[-2. , 1. ],
[ 1.5, -0.5]])
행렬식
>>> det(A) -2.0
대각성분
>>> diag(A) array([1, 4])
역행렬을 구하는 함수는 linalg.inv이다.
>>> inv(A)
matrix([[-2. , 1. ],
[ 1.5, -0.5]])
의사역행렬은 linalg.pinv
>>> pinv(A)
matrix([[-2. , 1. ],
[ 1.5, -0.5]])
고유값 분해는 linalg.eig
>>> (V,M) = eig(A)
>>> V #고유값
array([-0.37228132, 5.37228132])
>>> M #고유벡터
matrix([[-0.82456484, -0.41597356],
[ 0.56576746, -0.90937671]])
특이값 분해는 linalg.svd
>>> (U,S,V) = svd(A)
>>> U
matrix([[-0.40455358, -0.9145143 ],
[-0.9145143 , 0.40455358]])
>>> S
array([ 5.4649857 , 0.36596619])
>>> V
matrix([[-0.57604844, -0.81741556],
[ 0.81741556, -0.57604844]])
Ax = b 꼴의 방정식을 풀때는 linalg.solve(A,b)꼴로 사용한다.
>>> solve(A,mat("[5;6]"))
matrix([[-4. ],
[ 4.5]])
SciPy의 scipy.linalg 모듈에는 numpy.linalg 모듈에 빠져있는 함수들이 포함되어 있다. 다음의 예를 보자.
>>> from numpy import * >>> import scipy >>> import scipy.linalg as lin # scipy.linalg에 lin이라는 별칭을 붙인다.
LU분해
>>> (P,L,U) = lin.lu(a)
>>> P
array([[ 0., 1.],
[ 1., 0.]])
>>> L
array([[ 1. , 0. ],
[ 0.33333333, 1. ]])
>>> U
array([[ 3. , 4. ],
[ 0. , 0.66666667]])
QR분해
>>> (Q,R) = lin.qr(a)
>>> Q
array([[-0.31622777, -0.9486833 ],
[-0.9486833 , 0.31622777]])
>>> R
array([[-3.16227766, -4.42718872],
[ 0. , -0.63245553]])