행렬의 덧셈과 뺄셈
두개의 행렬이 주어졌을 때, 두 행렬의 합과 차는 두 행렬의 row 수와 col 수가 같아야 구할 수 있다.
행렬의 합
두 행렬의 합은 매우 간단하다. 두 개의 행과 열의 수가 같아야하기 때문에 그냥 2 중 for 문으로 두 Matrix 의 값을 더해주면 된다.
def solution(arr1, arr2):
r_length, c_length = len(arr1), len(arr1[1])
answer = [[0] * c_length for _ in range(r_length)]
for row in range(r_length):
for col in range(c_length):
answer[row][col] = arr1[row][col] + arr2[row][col]
for row in range(r_length):
print(*answer[row])
solution(
[
[1,2,3],
[4,5,6],
[7,8,9],
],
[
[10,11,12],
[13,14,15],
[16,17,18]
]
)
행렬의 차
두 행렬의 차도 앞서 적은 행렬의 덧셈과 부등호만 다른거 뺴고 같다.
def solution(arr1, arr2):
r_length, c_length = len(arr1), len(arr1[1])
answer = [[0] * c_length for _ in range(r_length)]
for row in range(r_length):
for col in range(c_length):
answer[row][col] = arr1[row][col] - arr2[row][col]
for row in range(r_length):
print(*answer[row])
solution(
[
[1,2,3],
[4,5,6],
[7,8,9],
],
[
[10,11,12],
[13,14,15],
[16,17,18]
]
)
행렬의 곱셈
행렬의 곱셈은 덧셈과 뺄셈과 다르게, 두 행렬의 row 와 col 수가 달라도 구할 수 있다. 하지만 이에도 조건이 있는데 matrix1 이 2 행 3 열로 이루어진 (2 x 3)
구조라면, matrix2 는 3행 2열을 갖는 (3 x 2)
구조여야 한다. 좀더 정확히는 martrix1 의 열의 수와 matrix2 의 행의 수가 같아야 한다
. 또한, 이 두 행렬의 곱 (2 x 3) * (3 x 2) 에 대한 결과 행렬은 matrix1 의 행과 matrix2 의 열인 (2 x 2) 구조가 나오게 된다.
이게 matrix1 의 행과 matrix2 의 열을 곱해주면 된다.
def solution(arr1, arr2):
arr1_row, arr1_col = len(arr1), len(arr1[1])
arr2_col = len(arr2[1])
answer = [[0] * arr2_col for _ in range(arr1_row)]
for n in range(arr1_row):
for k in range(arr2_col):
for m in range(arr1_col):
answer[n][k] += arr1[n][m] * arr2[m][k]
for line in answer:
print(*line)
solution(
[
[1,2,3],
[4,5,6]
],
[
[10,11,12],
[13,14,15],
[16,17,18]
]
)