반응형
문제 설명
numpy.ndarray타입의 임의의 모양을 가진 2차원 배열(행렬)들이 담긴 리스트가 arr_list로 주어집니다. arr_list에 담긴 배열들을 순서대로 사용하여 A를 다음과 같이 처리합니다.
- 초기 A의 상태는 [[0]]입니다.
- arr_list에서 앞에서부터 순서대로 배열을 꺼내며, 해당 배열을 arr이라 칭하고 다음 두 가지 경우에 대하여 처리합니다.
a. A와 arr를 행렬 곱 연산이 불가할 때, arr를 버리고 다음 배열을 꺼냅니다.
b. A와 arr를 행렬 곱 연산이 불가할 때, 다음과 같이 연산하고 다음 배열을 꺼냅니다.A = (A + 1) · (arr * 2)
이때 +
와 *
는 요소 별로 더하고 곱하는 연산, ·
은 행렬 곱 연산을 의미합니다.
위 과정을 통해 arr_list
에 있는 모든 배열들을 처리하고 난 뒤, 최종 A를 반환하는 함수를 구하세요.
입출력 예
arr_list | return |
---|---|
[[[ -9 -14]] [[ 14 -2 0] [-14 -5 1] [-11 3 -6]] [[-2 -6] [18 0]]] | [[-904. 204.]] |
입출력 예 설명
arr_list
에 있는 arr들의 모양을 살펴보면 다음과 같습니다.
- [[ -9 -14]] 는 1 x 2 모양의 배열(행렬)이다.
- [[ 14 -2 0] [-14 -5 1] [-11 3 -6]] 는 3 x 3 모양의 배열(행렬)이다.
- [[-2 -6] [18 0]] 는 2 x 2 모양의 배열(행렬)이다.
초기 A는 [[0]]이고, 처리하는 과정은 다음과 같습니다.
초기 A는 [[0]]이고, 처리하는 과정은 다음과 같습니다.
A | arr | 처리 결과 |
---|---|---|
[[0]] | [[ -9 -14]] | [[-18. -28.]] |
[[-18. -28.]] | [[ 14 -2 0] [-14 -5 1] [-11 3 -6]] | [[-18. -28.]] |
[[-18. -28.]] | [[-2 -6] [18 0]] | [[-904. 204.]] |
두 번째의 경우 1 x 2 모양을 가진 A의 열과 3 x 3 모양을 가진 arr의 행이 맞지 않으므로 처리하지 않고 넘어갑니다.
문제 풀이
import numpy as np
def solution(arr_list):
A = np.array([[0]])
for i in arr_list:
try:
A = (A+1).dot(i*2)
except ValueError:
pass
answer = A
return answer
문제 해석
행렬곱의 각 차원의 끝과 시작이 같아야 한다. 이때 같지 않으면 ValueError가 발생하는데 이때 예외처리를 해주면서 코드를 작성했다.
'AI_Bootcamp' 카테고리의 다른 글
Numpy 심화 실습 chap4 브로드캐스팅 2 (0) | 2022.01.20 |
---|---|
Numpy 심화 실습 chap3 브로드캐스팅 (0) | 2022.01.20 |
Numpy 심화 실습 chap2 bool 인덱싱 (0) | 2022.01.19 |
Numpy 심화 실습 chap 1 matmul()와 dot()의 차이 (0) | 2022.01.19 |
3주차 Day13 Numpy 실습 III (0) | 2022.01.19 |