# 기본적인 2x2 numpy array 만들기 a = np.array(range(1, 5)).reshape(2, 2) b = np.array(range(11, 15)).reshape(2, 2) print(a, '\n') print(b, '\n') # out # # a : # [[1 2] # [3 4]] # b : # [[11 12] # [13 14]] # 행렬의 기본연산 print('a + b : \n', np.add(a, b), '\n') print('a - b : \n', np.subtract(a, b), '\n') # 스칼라 값별 나눗셈 연산 print('a / b : \n', np.divide(a, b), '\n') # 행렬 곱셈 연산 print('a @ b : \n', np.matmul(a, b), '\n') # 스칼라의 값별 곱셈 연산 print('a * b : \n', np.multiply(a, b), '\n') # out # # a + b : # [[12 14] # [16 18]] # a - b : # [[-10 -10] # [-10 -10]] # a / b : # [[0.09090909 0.16666667] # [0.23076923 0.28571429]] # a @ b : # [[37 40] # [85 92]] # a * b : # [[11 24] # [39 56]]
Norm 은 벡터의 크기(혹은 길이)를 측정하는 방법 혹은 함수
주어진 벡터에 대한 Norm 정의
L1 Norm
L2 Norm
# L1 Norm 식 구현 l1 = abs(vector).sum() # L2 Norm 식 구현 l2 = np.sqrt((vector**2).sum()) # np.linalg.norm 함수로 구현되어 있음 # ord=1 == L1 Norm | ord=2 == L2 Norm # (axis와 ord 파라미터를 입력하지 않을 시 기본값은 L2 Norm임) # l1 = np.linalg.norm(v, ord=1) # l2 = np.linalg.norm(v, ord=2)
MSE = Mean Squared Error
MAE = Mean Absolute Error
# MSE 식 구현 MSE = np.square(np.subtract(x, y)).mean() # MAE 식 구현 MAE = np.abs(np.subtract(x, y)).mean() # sklean.metrics 에 아주 잘 구현이 되어있다. # 우리는 가져다 쓰면 된다^^ # from sklearn.metrics import mean_squared_error as mse # MSE = mse(x, y) # from sklean.metrics import mean_absolute_error as mae # MAE = mae(x, y)
import copy # (2x2) ~ (3x3) 까지 가능한 행렬식 함수 def determinant(matrix, n): # 2x2 행렬식 계산 if n == 2: return matrix[0][0] * matrix[1][1] - matrix[1][0] * matrix[0][1] # 3x3 행렬식 계산 if n == 3 det = 0 # 1열 빼고 복사 new_matrix = copy.deepcopy(matrix[:, 1:]) # 0~2 까지 루프 for i in range(n): # 2차원 행렬연산에 필요한 행만 추출 temp = copy.deepcopy(np.delete(new_matrix, i, axis=0)) # 수식의 +,-구분을 위해 -1에 i를 제곱해주고, # 1열에 원소 차례대로 뽑아서, 2차원 행렬식과 곱 det += (-1)**i * matrix[i][0] * determinant(temp, n-1) return det # 하지만 np.linalg.det() 함수로 가능하다는 것 # 주의 float 연산에 약간의 오차가 있어서 소수점 아주 작은 수가 나올 수 있음 # ex a = np.array([[1, 0, 2], [-3, 4, 6], [-1, -2, 3]]) print(np.linalg.det(a)) # 위 함수 사용 print(determinant(a, 3)) # # out # 44.000000000000014 # 44