숫자가 한 줄로 늘어선 것이나, 직사각형으로 늘어놓은 것, 3차원으로 늘어놓은 것, N차원으로 나열하는 것 통틀어서 다차원 배열 이라고 한다.
넘파이를 이용해서 다차원 배열을 작성해보자!
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
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)
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]