1. 행렬의 합과 차
두 개의 이미지를 겹치거나 한 이미지에서 일부를 제거할 때
두 행렬의 합과 차를 이용합니다.
일반적으로 m*n 행렬 A와 B에 대해, A와 B의 같은 위치에 있는
성분의 합을 성분으로 하는 행렬을 A와 B의 합이라 하고,
이것을 기호로 A+B와 같이 나타냅니다.
여기서 A+B도 m*n 행렬입니다.
import numpy as np
import matplotlib.pyplot as plt
A = np.array([[0,1,1,1,0],
[1,1,1,1,1],
[0,1,0,0,0]])
B= np.array([[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,1,0]])
C = A+B
plt.xticks([])
plt.yticks([])
plt.imshow(C,cmap = 'gray')
plt.show()
print(C)
0이 검은색이고 1이 흰색이라 생각했을때 A와 B의 행렬을 더하면 C와 같은 결과가 나옵니다.
C는 위와 같은 행렬이 됩니다.
즉, 행렬의 합과 차는 같은 위치에 있는 성분끼리 계산합니다.
2. 행렬의 곱
행렬의 곱은 행렬의 스칼라 곱과 행렬 끼리의 곱으로 나눌 수 있습니다.
행렬의 스칼라 곱은 행렬과 스칼라를 곱한 것으로
행렬의 합과 차처럼 각 성분에 스칼라를 곱해주면 됩니다.
ex) scalar = 2 , matrix : A = [[1,2,],[3,4]] 일때 2*A =
[[2,4],[6,8]]
import numpy as np
A = np.array([[8,-4],
[-2,6]])
print(3*A)
print((1/2)*A)
A = np.array([[120,64,64],
[64,64,120]])
plt.subplot(1,3,1)
plt.xticks([])
plt.yticks([])
plt.imshow(A,cmap='gray',vmin=0,vmax=255)
plt.subplot(1,3,2)
plt.xticks([])
plt.yticks([])
plt.imshow((1/2)*A,cmap='gray',vmin=0,vmax=255)
plt.subplot(1,3,3)
plt.xticks([])
plt.yticks([])
plt.imshow(2*A, cmap = 'gray',vmin=0,vmax=255)
A와 같은 행렬이 있습니다.
여기서 A의 스칼라를 곱해주면 A행렬 이미지의 밝기가 달라지게 됩니다.
행렬의 곱셈은 k번째 행벡터와 i번째 열벡터 사이의 내적을
성분으로 가지는 행렬을 계산합니다.
따라서 행렬의 곱셈은 x의 열의 개수와 y의 행의 개수가 같아야 합니다.
A = [[1,2,3],[4,5,6]] 2*3의 행렬
B = [[1,3],[4,6],[7,8]] 3*2의 행렬 일때 ( 행렬 곱은 @을 씁니다.)
A @ B = 1 * 1 + 2 * 4 + 3 * 7 = 30 -> 1행 1열
1 * 3 + 2 * 6 + 3 * 8 = 39 -> 1행 2열
4 * 1 + 5 * 4 + 6 * 7 = 66 -> 2행 1열
4 * 3 + 5 * 6 + 6 * 8 = 90-> 2행 2열
2 * 3 @ 3*2 -> 2*2행렬이 됩니다.
행렬의 곱을 파이썬으로 구현하면 다음과 같습니다.
import numpy as np
A = np.array([[1,2,3,4],
[7,8,9,10]])
B = np.array([[1],
[2],
[3],
[4]])
C = np.array([[1,0],
[2,0],
[1,2],
[2,3]])
D = np.array([[0,1,2,4]])
print(A@B)
# print(B@A) -> shape가 맞지 않아 안됨
print(A@C)
print(C@A)
print(D@B)
print(B@D)
위와 같은 결과가 나오는데 여기서 (B@A)가 에러가 뜹니다.
행렬의 곱을 하기 위해선 B의 열과 A의 행의 길이가 같아야 할 수 있습니다.
B는 4행 1열의 행이고 A는 2행 4열이므로 B의 열과 A의 행의 길이가 같지 않아 에러가 나게됩니다.
'머신러닝' 카테고리의 다른 글
[파이썬] 역행렬과 유사역행렬 (0) | 2023.04.20 |
---|---|
[파이썬] 행렬의 내적과 연산 (0) | 2023.04.19 |
[파이썬] 행렬과 행렬의 이미지 표현 (0) | 2023.04.11 |
[파이썬] 인공지능 수학 군집화, 유사도 (0) | 2023.04.05 |
[파이썬] 인공지능 수학 자연어 처리( BOW, DTM, TF-IDF ) (0) | 2023.04.04 |