Linear Algebra

In [1]:
import numpy as np
In [4]:
A= [[1,2],[3,4]]
In [6]:
B=[[3,4],[4,5]]

$\begin{bmatrix} 1&2 \\ 3&4 \\ \end{bmatrix}$ $\begin{bmatrix} 3&4 \\ 4&5 \\ \end{bmatrix}$

In [7]:
np.dot(A,B)
Out[7]:
array([[11, 14],
       [25, 32]])

inner product

$ (1,2,3) \cdot (0,1,0) = 2$

In [8]:
a=np.array([1,2,3])
In [9]:
b=np.array([0,1,0])
In [10]:
np.inner(a,b)
Out[10]:
2
In [11]:
np.inner(np.eye(2),7)
Out[11]:
array([[ 7.,  0.],
       [ 0.,  7.]])

행렬의 거듭제곱

In [13]:
from numpy import linalg as LA
In [14]:
i=np.array([[0,1],[-1,0]])
In [16]:
LA.matrix_power(i,3)
Out[16]:
array([[ 0, -1],
       [ 1,  0]])
In [17]:
LA.matrix_power(i,4)
Out[17]:
array([[1, 0],
       [0, 1]])

행렬의 Eigenvalue, Eigenvector

In [18]:
D=np.diag((1,2,3))
In [19]:
D
Out[19]:
array([[1, 0, 0],
       [0, 2, 0],
       [0, 0, 3]])
In [20]:
w,v = LA.eig(D)
In [25]:
w, v
Out[25]:
(array([ 1.,  2.,  3.]), array([[ 1.,  0.,  0.],
        [ 0.,  1.,  0.],
        [ 0.,  0.,  1.]]))

위의 Eigenvalue는 1,2,3 이고 뒤에는 대응하는 벡터들

In [26]:
w,v = LA.eig(np.array([[1,-1],[1,1]]))
In [27]:
w
Out[27]:
array([ 1.+1.j,  1.-1.j])
In [28]:
v
Out[28]:
array([[ 0.70710678+0.j        ,  0.70710678-0.j        ],
       [ 0.00000000-0.70710678j,  0.00000000+0.70710678j]])

Determinant

In [29]:
LA.det(D)
Out[29]:
6.0

Rank

In [30]:
LA.matrix_rank(np.eye(4))
Out[30]:
4
In [31]:
LA.matrix_rank(D)
Out[31]:
3
In [33]:
LA.matrix_rank(np.zeros((4,4)))
Out[33]:
0

Linear equation

$ \begin{eqnarray} 3x +y= 9 \\ x+2y= 8\end{eqnarray}$

In [34]:
a=np.array([[3,1],[1,2]])
In [35]:
b=np.array([9,8])
In [36]:
x=LA.solve(a,b)
In [37]:
x
Out[37]:
array([ 2.,  3.])

확인

In [38]:
np.allclose(np.dot(a,x),b)
Out[38]:
True

역행렬

In [39]:
a
Out[39]:
array([[3, 1],
       [1, 2]])
In [42]:
ai=LA.inv(a)
In [43]:
ai
Out[43]:
array([[ 0.4, -0.2],
       [-0.2,  0.6]])
In [44]:
np.dot(a,ai)
Out[44]:
array([[ 1.,  0.],
       [ 0.,  1.]])
In [45]:
np.dot(ai,a)
Out[45]:
array([[ 1.,  0.],
       [ 0.,  1.]])
In [46]:
np.allclose(np.dot(a,ai),np.eye(2))
Out[46]:
True
In [ ]: