728x90
반응형

다차원 배열의 계산

넘파이의 다차원 배열을 사용한 계산법을 숙달하면 신경망을 효율적으로 구현할 수 있음.

신경망에서 행렬의 곱이 중요한 부분이기에 정확하게 파악하고 넘어가기.

 


다차원 배열

다차원 배열도 그 기본은 '숫자의 집합'임

숫자가 한 줄로 늘어선 것이나 직사각형으로 늘어놓은 것, 3차원으로 늘어놓은 것이나 (더 일반화한) N차원으로 나열하는 것을 통틀어 다차원 배열이라고 함.

 

1차원 배열

import numpy as np

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

print(A)		# [1 2 3 4]
print(np.ndim(A))	# 1
print(A.shape)		# (4,)
print(A.shape[0])	# 4

배열의 차원 수는 np.ndim() 함수로 확인할 수 있음. 또, 배열의 형상은 인스턴스 변수인 shape로 알 수 있음.

위에서 코드를 보면 A는 1차원 배열이고 원소 4로 구성되어 있음을 확인할 수 있음.

여기서 A.shape가 튜플을 반환하는 이유는 1차원 배열이라도 다차원 배열일 때와 일관된 형태로 결과를 반환하기 위함임. 예를 들어 1차원 배열일 때는 (4, ), 2차원 배열일 때는 (4, 3), 3차원 배열일 때는 (4, 3, 2) 같은 튜플을 반환함

 

2차원 배열

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

print(B)
# 결과
[[1 2]
 [3 4]
 [5 6]]
 
print(np.ndim(B))	# 2
print(B.shape)		# (3, 2)

3x2 배열인 B는 처음 차원(0번째 차원)에는 원소가 3개, 다음 차원(1번째 차원)에는 원소가 2개 있다는 의미.

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

 


행렬의 곱

행렬(2차원 배열)의 곱을 구하는 방법?

행렬 곱은 왼쪽 행렬의 행(가로)과 오른쪽 행렬의 열(세로)을 원소별로 곱하고 그 값들을 더해서 계산함.

 

코드 예시

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

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

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

print(np.dot(A, B))
# 결과
[[19 22]
 [43 50]]

 

여기서 주의할 점은 A의 행 수와 B의 열 수가 같아야 함!

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

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

print(np.dot(A, B))
# 결과
[[22 28]
 [49 64]]

A는 2x3 행렬, B는 3x2 행렬임.

 

A가 2차원 행렬이고 B가 1차원 배열일 때 예시

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

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

print(np.dot(A, B))	# [23 53 83]
반응형
복사했습니다!