[2022 국민대학교 겨울 인공지능 특강] 3주차 4일 학습 내용

하지원·2022년 1월 20일
0

이번 수업의 문제는 행렬 곱 문제다.

arr_list = [[[-9, -14]], [[14, -2, 0], [-14, -5, 1], [-11, 3, -6]], [[-2, -6], [18, 0]]]
위 배열에 담겨있는 배열들을 하나하나씩 읽어내야하는데, 서로 크기가 다르다.
그리고 각 배열을 이용해서 A = (A + 1) · (arr * 2) 식을 내적곱 계산하는 것이 문제이며, 배열 A의 초기 배열은 [[0]]이다. 계산하려는 두 배열이 내적이 되지 않을 경우에는 전 배열 계산 시 얻은 값으로 진행하는 방식이었다. 즉 ValueError가 뜨면 그냥 스킵하게 만든다는 것이었다.

그래서 서로 내적 계산을 진행하도록 코딩을 했지만, 이 ValueError 때문에 계산이 중단되어 실행할 수 없었다. 그래서 이에 대해 찾아봤더니 반복문의 try와 except라는 것이었다. 즉, 평소에는 해야할 계산을 진행하되, ValueErrorr가 뜰 때만 전의 값을 그대로 출력하고 다음 계산으로 넘어가게 하는 코드를 짜야하는 것이었다. 그래서 어제 수업에서 이용했던 continue를 이용했다.

    try:
        answer = np.dot((answer+1), arr)
    except ValueError:
        continue

설명하자면, A = (A + 1) · (arr * 2) 식을 시도하되(try), 두 배열이 내적되지 않아 ValueError가 뜰 경우, (except ValueError) 반복문의 처음으로 되돌리는 것이다(continue).

최종 코드는 다음과 같다.

import numpy as np

def solution(arr_list):
    answer = np.array([[0]])
    for i in range(len(arr_list)):
        arr = np.array(arr_list[i])
        arr *= 2
        try:
            answer = np.dot((answer+1), arr)
        except ValueError:
            continue
    return answer

이렇게 지난 수업에 이어 이번 수업에서도 평소에 사용하지 않던 코드를 사용하였다.

profile
국민대 전자공학부, 서강대학교 석사과정, 크래프톤 정글 2기

0개의 댓글