[Python] 행렬의 덧셈
문제
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
ex) arr1 = [[1, 2], [2, 3]], arr2 = [[3, 4], [5, 6]] ➡️ [[4, 6], [7, 9]]
arr1 = [[1], [2]], arr2 = [[3], [4]] ➡️ [[4], [6]]
이 문제를 보고 바로 numpy 라이브러리가 떠올랐습니다.
numpy는 대규모 다차원 배열과 행렬과 계산을 지원하는 대표적인 라이브러리이기 때문입니다.
웹 크롤링을 하고 얻은 데이터들을 numpy의 array에 담아서 분석을 하고,머신러닝에서는 데이터 전처리와 모델 학습 및 평가에 numpy의 행렬과 계산이 쓰입니다.
데이터 분석가에게 매우 중요한 라이브러리입니다.
import numpy as np
def sumMatrix(A,B):
arr11 = np.array(A)
arr22 = np.array(B)
result = arr11 + arr22
return result.tolist()
해당 코드를 바로 제출해서 정답을 맞췄으나
라이브러리 없이도 맞출 수 있어야한다는 생각이 들었습니다.
처음에 좌측 이미지의 코드를 제출했었는데 틀렸었습니다.
[1, 2]와 [2,4]와 같이 하나의 리스트에 두 개의 숫자가 들어있는 경우 작동하지 않음을 인지했습니다.
출력물이 [[4, 6] [6, 9]]와 같이 나와야 하는데 [[4], [6], [6], [9]]와 같이 나온 것입니다.
j의 for 루프가 반복할 때마다 하나의 리스트를 만들어주는 게 원인인 것을 알게되어
j의 for 루프가 완전히 끝난 후에 하나의 리스트를 만들어주는 것을 목표로 하여 다시 작성하였습니다.
i의 for 루프가 시작할 때 answer.append([])로 미리 리스트를 만들어놓고
j의 for루프의 값의 값을 리스트에 추가하였습니다.
이제 정상적으로 잘 작동하네요.
다른 사람들이 해결한 방법 중에 괜찮은 풀이가 많았습니다.
그래서 다른 사람들의 풀이를 보고 몰랐던 함수 하나를 정리해보려고 합니다.
zip()
zip 함수는 파이썬에서 여러 시퀀스(리스트, 튜플 등)를 병렬로 순회하면서 대응되는 요소들을 튜플로 묶어주는 함수입니다.
zip 함수를 사용하면 여러 리스트를 동시에 처리할 수 있어서 매우 유용합니다.
list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9]
zipped = zip
(list1, list2, list3)
print(list(zipped))
이렇게 하면 [(1, 4, 7), (2, 5, 8), (3, 6, 9)] 라는 결과가 나옵니다.
zip()을 unpack하기 위해서는 간단하게 zip() 함수의 결과가 담긴 변수 앞에 *을 붙여주면 됩니다.
zipped = [(1, 'a'), (2, 'b'), (3, 'c')]
list1, list2 = zip(*zipped)
print(list1)
print(list2)
이렇게 하면 [1, 2, 3]과 [4, 5, 6]이라는 결과가 나옵니다.