Numpy: 선형대수

불러들이기

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.linalg

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]])