매주 금요일은 공강 날 ~ ! 그런데 개강하고 단 한 번도 부지런히 보내본 적이 없는 것 같다 ,, 반성해 ㅠ 사실 공강이 있다는 건 그만큼 다른 날 수업을 더 많이 듣는다는 거니까 라는 생각으로 푹 자고 푹 쉬는 것을 목표로 했는데 현재 내 인생에 있어서 그러면 안 되는 순간이라는 걸 생각하고 또 생각한다. 그래서 ! 오늘은 부족한 잠을 채울 정도로만 자고 오전에 카페로 나왔다. 점점 잠을 줄여가야지 ...!
일을 시작하기 전에 워밍업으로 코테 문제를 하나 풀었다. 쉬워서 금방 뚝딱뚝딱 풀어낼 줄 알고 켠 문제였는데 새로운 개념을 써야 했다. 뭐 알아가는 기쁨은 좋다!
2차 코딩테스트 통과를 위해서라도 열심히 살아야지 .. 절대 4차까지는 가고 싶지 않다.
프로그래머스 [행렬의 곱셈] 문제 풀이
import numpy as np
def solution(arr1, arr2):
numpy1 = np.array(arr1)
numpy2 = np.array(arr2)
result = numpy1 @ numpy2
return result.tolist()
numpy 는 행렬 문제를 위해서라면 꼭 알고 있어야 하는 개념 같다. 물론 이제껏 피해왔지만... 이제는 더 이상 피할 곳이 없어 !!!! 개념을 쓰면서 신기했던 점은 numpy 는 json 형태 라는 것...? 굳이 어려웠던 점을 꼽자면 list로 변환하는 과정이 다른 개념들과 달리 list(numpy) 처럼 되지 않아 애썼다는 것이다.
(1) 덧셈
import numpy as np
arr1 = np.array(
[
[2, 3, 2],
[4, 2, 4],
[3, 1, 4]
]
)
arr2 = np.array(
[
[5, 4, 3],
[2, 4, 1],
[3, 1, 1]
]
)
result = arr1 + arr2
print(result)
#result
[[7 7 5]
[6 6 5]
[6 2 5]]
덧셈이기 때문에 행, 열의 개수가 서로 같아야 한다는 점 주의 !
(2) 뺄셈
import numpy as np
arr1 = np.array(
[
[2, 3, 2],
[4, 2, 4],
[3, 1, 4]
]
)
arr2 = np.array(
[
[5, 4, 3],
[2, 4, 1],
[3, 1, 1]
]
)
result = arr1 - arr2
print(result)
#result
[[-3 -1 -1]
[ 2 -2 3]
[ 0 0 3]]
(3) 곱셈
import numpy as np
arr1 = np.array(
[
[2, 3, 2],
[4, 2, 4],
[3, 1, 4]
]
)
arr2 = np.array(
[
[5, 4, 3],
[2, 4, 1],
[3, 1, 1]
]
)
result = arr1 * arr2
print(result)
#result
[[10 12 6]
[ 8 8 4]
[ 9 1 4]]
(4) 나눗셈
import numpy as np
arr1 = np.array(
[
[2, 3, 2],
[4, 2, 4],
[3, 1, 4]
]
)
arr2 = np.array(
[
[5, 4, 3],
[2, 4, 1],
[3, 1, 1]
]
)
result = arr1 / arr2
print(result)
#result
[[0.4 0.75 0.66666667]
[2. 0.5 4. ]
[1. 1. 4. ]]
(5) 행렬의 곱셈
import numpy as np
arr1 = np.array(
[
[2, 3, 2],
[4, 2, 4],
[3, 1, 4]
]
)
arr2 = np.array(
[
[5, 4, 3],
[2, 4, 1],
[3, 1, 1]
]
)
result = arr1 @ arr2
print(result)
#result
[[22 22 11]
[36 28 18]
[29 20 14]]
일반 곱셈과는 다르게 행렬 간 곱셈 연산자는 @ 이다.
사칙연산은 두 행렬의 행과 열의 개수가 모두 같아야 하지만 행렬 간 곱셈에서는 첫번째 행렬의 열 개수와 두번째 행렬의 행 개수만 같으면 된다.
나의 경우에는 이렇게 numpy 로 계산한 값을 list 로 다시 바꿔주어야 했다.
result = np.array(
[
[5, 4, 3],
[2, 4, 1],
[3, 1, 1]
]
)
print(result)
#result
[[5 4 3]
[2 4 1]
[3 1 1]]
print(list(result))
#result
[array([5, 4, 3]), array([2, 4, 1]), array([3, 1, 1])]
print(result.tolist())
#result
[[5, 4, 3], [2, 4, 1], [3, 1, 1]]
그냥 list(numpy) 형태로 해주면 안됐다. numpy.tolist() 를 써주어야 했다.
앞으로는 이런 개념들을 까먹지 않고 계속 사용해야지...! 그러려고 블로그 글을 작성하는 것도 있다 ㅎㅎ 아무튼 화이또 !
안녕 !