
ํ๋ ฌ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋๊ท๋ชจ ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ง์ํ๋ ํ์ด์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
๋จผ์ numpy๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ importํ๋ค.
import numpy as np
1.๋ฒกํฐ์ ์ค์นผ๋ผ ์ฐ์ฐ
x = np.array([1,2,3])
c= 5
print(f"๋ํ๊ธฐ:{x}+{c} = {x+c}")
print(f"๋นผ๊ธฐ:{x}-{c} = {x-c}")
print(f"๊ณฑํ๊ธฐ:{x}*{c} = {x*c}")
print(f"๋๋๊ธฐ:{x}/{c} = {x/c}")
>>>๋ํ๊ธฐ:[1 2 3]+5 = [6 7 8]
๋นผ๊ธฐ:[1 2 3]-5 = [-4 -3 -2]
๊ณฑํ๊ธฐ:[1 2 3]*5 = [ 5 10 15]
๋๋๊ธฐ:[1 2 3]/5 = [0.2 0.4 0.6]
2.๋ฒกํฐ์ ๋ฒกํฐ ์ฐ์ฐ
y = np.array([1,3,5])
z = np.array([2,9,20])
print(f"๋ํ๊ธฐ:{y}+{z} = {y+z}")
print(f"๋นผ๊ธฐ:{y}-{z} = {y-z}")
print(f"๊ณฑํ๊ธฐ:{y}*{z} = {y*z}")
print(f"๋๋๊ธฐ:{y}/{z} = {y/z}")
>>>๋ํ๊ธฐ:[1 3 5]+[ 2 9 20] = [ 3 12 25]
๋นผ๊ธฐ:[1 3 5]-[ 2 9 20] = [ -1 -6 -15]
๊ณฑํ๊ธฐ:[1 3 5]*[ 2 9 20] = [ 2 27 100]
๋๋๊ธฐ:[1 3 5]/[ 2 9 20] = [0.5 0.33333333 0.25 ]
python์ ๋ฆฌ์คํธ์ ์ ์ฌํ๊ฒ ์งํ
W = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(W[0,0])
print(W[2,3])
>>>1
12
W[0:2,1:3]
>>>array([[2, 3],
[6, 7]])
#์ ์ฒด ์ด slicing
W[0:2,0:4]
W[:2,:]#๋ ๋ค ์ถ๋ ฅ๊ฐ์ด ๊ฐ๋ค
>>>array([[1, 2, 3, 4],
[5, 6, 7, 8]])
#์ ์ฒด ํ slicing
W[:,2:4]
>>>array([[ 3, 4],
[ 7, 8],
[11, 12]])
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ Type์ data์ ๋ํด์๋ง ์ฐ์ฐ์ด ์ ์ฉ ๊ฐ๋ฅ
ํ์ง๋ง ๋ง์ฝ์ ํผ์ฐ์ฐ์๊ฐ ์ฐ์ฐ ๊ฐ๋ฅํ๋๋ก ๋ณํ์ด ๊ฐ๋ฅํ๋ค๋ฉด ์ฐ์ฐ์ด ๊ฐ๋ฅ
#1. M X N, M X 1
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
x = np.array([0,1,0])
x = x[:,None]#x๋ฅผ ์ ์น
print(a+x)
>>>[[1 2 3]
[5 6 7]
[7 8 9]]
#2. M X N, 1 X N
y = np.array([0,1,-1])
print(a*y)
>>>[[ 0 2 -3]
[ 0 5 -6]
[ 0 8 -9]]
# 3. M X 1, 1 X N
t = np.array([1,2,3])#์ด๋ฒกํฐ๋ก ๋ฐ๊ฟ์ค์ผ ํจ
t = t[:,None] # transgpose
u = np.array([2,0,-2])
print(t+u)
>>>[[ 3 1 -1]
[ 4 2 0]
[ 5 3 1]]
์๋ฒกํฐ : ์์๊ฐ ๋ชจ๋ 0์ธ ๋ฒกํฐ
np.zeros(dim) dim์ ์ด๋ค ๊ฐ ํน์ ํํ
np.zeros(3)
np.zeros((3,3))
>>>array([0., 0., 0.])
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
์ผ๋ฒกํฐ : ์์๊ฐ ๋ชจ๋ 0์ธ ๋ฒกํฐ
np.ones(dim) dim์ ์ด๋ค ๊ฐ ํน์ ํํ
np.ones((3,3))
>>>array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
๋๊ฐํ๋ ฌ(diagonal matrix) : main diagonal ์ ์ ์ธํ ์ฑ๋ถ์ด 0์ธ ํ๋ ฌ
np.diag((2,4))
>>>array([[2, 0],
[0, 4]])
ํญ๋ฑํ๋ ฌ(identity matrix) : main diagonal์ด 1์ธ ๋๊ฐํ๋ ฌ
np.eye(2, dtype = int)#dtype ์ง์ ๊ฐ๋ฅ float ๋ํดํธ๊ฐ float
>>>array([[1, 0],
[0, 1]])
ํ๋ ฌ๊ณฑ(dot product)
*3์ฐจ์ ์ด์์ ํ๋ ฌ์์ np.dot()์ @ or np.mat_mul()์ ๋ค๋ฅด๊ฒ ์ฐ์ฐ
mat_1 = np.array([[1,4],[2,3]])
mat_2 = np.array([[7,9],[0,6]])
mat_1.dot(mat_2)
mat_1@ mat_2
>>>array([[ 7, 33],
[14, 36]])
๋๊ฐํฉ(Trace) : ์ฃผ ๋๊ฐ์์์ ๊ฐ์ ๋ชจ๋ ๋ํ ๊ฐ์ด๋ค.
arr=np.array([[1,2,3],[4,5,6],[7,8,9]])
arr.trace()
>>>15
ํ๋ ฌ์(determinant) : ์ ๋ฐฉํ๋ ฌ์ ์ค์นผ๋ผ๋ฅผ ๋์์ํค๋ ํจ์์ ํ๋์ด๋ค.
arr_2 = np.array([[2,3,],[1,6]])
np.linalg.det(arr_2)
>>>9
์ญํ๋ ฌ(inverse matrix) : nxnํ๋ ฌ A,B์ ๋ํด AB=BA=I์ ๋ง์กฑํ๋ ํ๋ ฌ B๋ฅผ A์ ์ญํ๋ ฌ์ด๋ผ๊ณ ํ๋ค.
mat = np.array([[1,4],[2,3]])
mat_inv = np.linalg.inv(mat)
mat @ mat_inv
>>>array([[ 1.00000000e+00, 0.00000000e+00],
[-1.11022302e-16, 1.00000000e+00]])
์ ๋ฐฉํ๋ ฌ A์ ๋ํด ๋ฅผ ๋ง์กฑํ๋ ์์์ ์ด์ ๋์ํ๋ ๋ฒกํฐx๋ฅผ ๊ณ ์ ๊ฐ ๊ณ ์ ๋ฒกํฐ๋ผ ํ๋ค.
mat = np.array([[2,0,-2],[1,1,-2],[0,0,1]])
np.linalg.eig(mat)
>>>(array([1., 2., 1.]),#์ด๊ฒ ๊ณ ์ ๊ฐ
array([[0. , 0.70710678, 0.89442719],#์ด๊ฒ ๊ณ ์ ๋ฒกํฐ
[1. , 0.70710678, 0. ],
[0. , 0. , 0.4472136 ]]))
eig_val, eig_vec = np.linalg.eig(mat)
mat @ eig_vec[:,0]#Ax์ ๊ฒฐ๊ณผ
>>>array([0., 1., 0.])
eig_val[0] * eig_vec[:,0]#eig_val[0]์ ์ค์นผ๋ผ์ด๋ฏ๋ก @ํ๋ ฌ๊ณฑ์ ์๋จ
>>>array([0., 1., 0.])
get_L2_norm()์ ์์ฑํ์ธ์np.array)number)import numpy as np
mat = np.array([1,3,5,7])
def get_L2_norm(mat):
return np.linalg.norm(mat, ord=2)
print(get_L2_norm(mat))
>>>9.16515138991168
is_singular() ๋ฅผ ์์ฑํ์ธ์np.array)import numpy as np
mat_1 = np.array([[1,3],[5,7]])
mat_2 = np.array([[1,2],[2,4]])
def is_singular(mat):
return True if np.linalg.det(mat) == 0 else False
print(is_singular(mat_1))
print(is_singular(mat_2))
>>>False
True
๋~!