다차원 배열의 계산

‍Juhee Kim·2021년 7월 5일
0

Deep Learning

목록 보기
7/7
post-thumbnail

다차원 배열

숫자가 한 줄로 늘어선 것이나, 직사각형으로 늘어놓은 것, 3차원으로 늘어놓은 것, N차원으로 나열하는 것 통틀어서 다차원 배열 이라고 한다.

넘파이를 이용해서 다차원 배열을 작성해보자!

  • 1차원 배열
import numpy as np

A = np.array([1,2,3,4])
print(A) # [1 2 3 4]

# 배열의 차원 수 확인
np.ndim(A) # 1

#배열의 형상(튜플로 반환: 다차원 배열일 때와 통일된 형태로 결과를 반환하기 위해)
A.shape # (4,)

A.shape[0] # 4
  • 2차원 배열
B = np.array([[1,2],[3,4],[5,6]])
print(B)
#[[1 2]
# [3 4]
# [5 6]]

# 배열의 차원 수 확인
np.ndim(B) # 2

#배열의 형상
B.shape # (3,2)

여기에선 '3X2 배열'인 B를 작성했다.
처음 차원에는 원소가 3개, 다음 차원에는 원소가 2개 있다는 의미이다.

2차원 배열은 행렬(Matrix)라고 부르고 배열의 가로방향을 행(row), 세로방향을 열(column)이라 부른다.

행렬의 곱

  • 행렬의 곱 계산 방법

  • 행렬의 곱에서는 대응하는 차원의 원소 수를 일치시켜야 한다.

  • 행렬의 곱 파이썬 구현

A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])

np.dot(A,B)
#array([[19, 22],
#       [43, 50]])

두 행렬의 곱은 넘파이 함수 np.dot()으로 계산한다.

  • 형상이 다른 행렬 곱 계산 구현
A = np.array([[1,2,3],[4,5,6]])
A.shape # (2,3)

B = np.array([[1,2],[3,4],[5,6]])
B.shape # (3,2)

np.dot(A,B) #결과
array([[22, 28],
       [49, 64]])
  • 대응하는 차원의 원소수가 일치하지 않는 경우
A = np.array([[1,2,3],[4,5,6]])
A.shape # (2,3)

C = np.array([[1,2],[3,4]])
C.shape # (2,2)

np.dot(A,C) #오류가 난다.
#결과 - ValueError: shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)
  • 2차원 배열, 1차원 배열 행렬의 곱에서도 '대응하는 차원의 원소수를 일치시키기' 원칙은 똑같이 적용된다.
A = np.array([[1,2],[3,4],[5,6]])
A.shape # (3,2)

B = np.array([7,8])
B.shape # (2,)

np.dot(A,B)
# array([23, 53, 83])

신경망에서의 행렬 곱

이 구현에서도 X,W,Y의 형상을 주의해야 한다. 특히 X와 W의 대응하는 차원의 원소수가 일치해야 한다는 것을 조심!

X = np.array([1,2])
X.shape # (2,)

W = np.array([[1,3,5],[2,4,6]])
W.shape # (2,3)

Y = np.dot(X,W)
print(Y)
#[ 5 11 17]
profile
찐문과생의 빅데이터 생존기🐣 열심히 할래용 (ง •_•)ง

0개의 댓글