본문 바로가기

Python/AI 수학 with Python

(33)
[Python] 접선 그리기 위의 예제를 python을 통해 구현해보자. [In] # 접선 그리기 # f(x) = 3x^2 + 4x - 5, x = 1 # f'(x) = 6x + 4 # f'(1) = 10 %matplotlib inline import numpy as np import matplotlib.pyplot as plt # f(x) def my_func(x): return 3*x**2 + 4*x - 5 # f'(x) def my_func_dif(x): return 6*x + 4 x = np.linspace(-3, 3, 1000) y = my_func(x) a = 1 y_t = my_func_dif(a)*x- a*my_func_dif(a) + my_func(a) # x = 1일 떄 접선 plt.plot(x, y, label ..
[Python] 코사인 유사도 구현 벡터의 내적 표시 https://taichi1.tistory.com/19 [Python] 벡터의 내적 표시 numpy의 dot() 함수로 간단하게 구현을 할 수 있다. 또한, 각각의 요소를 곱한 후 더하는 방식으로도 구현을 할 수 있다. [In] import numpy as np a = np.array([1, 2, 3]) b = np.array([3, 2, 1]) print('------ dot() 함수 -- taichi1.tistory.com Norm 구현 https://taichi1.tistory.com/20 [Python] Norm 구현 놈은 벡터의 크기를 나타내는 양이다. numpy의 linalg.norm() 함수를 이용해 다양한 놈을 구연할 수 있다. [In] import nu..
[Python] 고윳값과 고유벡터 구현 numpy의 linalg.eig() 함수를 통해 고윳값과 고유벡터를 동시에 구할 수 있다. [In] # 고윳값과 고유벡터 import numpy as np A = np.array([[3,1], [2,4]]) ev = np.linalg.eig(A) # 고유값과 고유벡터 동시계산 print('고유값 : ', ev[0]) print() print('고유벡터 :\n', ev[1]) [Out] 고유값 : [2. 5.] 고유벡터 : [[-0.70710678 -0.4472136 ] [ 0.70710678 -0.89442719]] linalg.eig() 함수의 첫번째 반환값은 고윳값이고, 두번째 반환값은 고유벡터이다. 이 때, 각각의 열은 각 고유벡터를 나타내고, 이 고유벡터의 L2놈은 1이 되는 것을 확인할 수 있다..
[Python] 벡터의 선형변환, 표준기저 구현 [In] # 벡터 그리기 %matplotlib inline import numpy as np import matplotlib.pyplot as plt # 화살표를 그리는 함수 def arrow(start, size, color): plt.quiver(start[0], start[1], size[0], size[1], angles = 'xy', scale_units = 'xy', scale = 1, color = color) # 화살표의 시작점 s = np.array([0,0]) # 벡터 a = np.array([2,3]) # 세로 벡터 arrow(s, a, color = 'black') # 그래프 표시 plt.xlim([-3, 3]) plt.ylim([-3, 3]) plt.xlabel('x', size ..
[Python] 단위행렬, 행렬식, 역행렬 구현 numpy의 eye() 함수로 간단하게 단위행렬을 구현할 수 있다. [In] # 단위행렬 import numpy as np print(np.eye(2)) # 2x2 단위행렬 print() print(np.eye(3)) # 3x3 단위행렬 print() print(np.eye(4)) # 4x4 단위행렬 [Out] [[1. 0.] [0. 1.]] [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] numpy의 linalg.det() 함수에 의해 행렬식을 구할 수 있다. [In] # 행렬식 import numpy as np a = np.array([[1,2], [3,4]]) # 2x2 행렬 b =..
[Python] 전치행렬와 행렬곱 구현 numpy로 배열을 생성 후, 배열명 뒤에 '.T'를 붙여주면 전치행렬이 된다. [In] import numpy as np a = np.array([[0,1,2], [1,2,3]]) # 2x3 행렬 print(a.T) # a의 전치 행렬 [Out] [[0 1] [1 2] [2 3]] 정상적으로 3x2 행렬로 변환된 것을 확인할 수 있다. 전치행렬을 이용해 행렬곱을 가능하게 만들 수 있다. [In] import numpy as np a = np.array([[0,1,2], [1,2,3]]) # 2x3 행렬 b = np.array([[0,1,2], [1,2,3]]) # 2x3 행렬 # print(np.dot(a*b)) # 전치하지 않고 행렬곱을 하면 에러가 발생! print(np.dot(a, b.T)) [O..
[Python] 행렬의 곱, 요소별 곱(아디마르 곱) 표시 numpy의 dot() 함수로 간단하게 구현할 수 있다. [In] import numpy as np a = np.array([[0,1,2], [1,2,3]]) # 2x3 행렬 b = np.array([[2,1], [2,1], [2,1]]) # 3x2 행렬 print(np.dot(a,b)) # 2x2 행렬 [Out] [[ 6 3] [12 6]] Python에서는 * 기호를 통해 요소별 곱(아디마르 곱)을 실행할 수 있다. [In] import numpy as np a = np.array([[0,1,2], [3,4,5], [6,7,8]]) # 3x3 행렬 b = np.array([[0,1,2], [2,0,1], [1,2,0]]) # 3x3 행렬 print(a*b) [Out] [[ 0 1 4] [ 6 0 5]..
[Python] Norm 구현 놈은 벡터의 크기를 나타내는 양이다. numpy의 linalg.norm() 함수를 이용해 다양한 놈을 구연할 수 있다. [In] import numpy as np a = np.array([1, -1, 1, -1]) print('----- L2놈 -----') print(np.linalg.norm(a)) # L2놈(디폴트) print('----- L1놈 -----') print(np.linalg.norm(a, 1)) # L1놈 print('----- L3놈 -----') print(np.linalg.norm(a, 3)) # L3놈 [Out] ----- L2놈 ----- 2.0 ----- L1놈 ----- 4.0 ----- L3놈 ----- 1.5874010519681994