본문 바로가기
Study/책『밑바닥부터 시작하는 딥러닝』

보충) numpy 행렬의 형상 차이 - (N,) (N,1)(1,N)

by 코드포휴먼 2020. 3. 8.

python numpy 라이브러리의 행렬 개념을 공부하다가 의문점이 생겼다.

일반적으로 numpy를 활용해 생성한 2X3 행렬 A의 형상을 알기 위해 A.shape로 프린트 하면 (2, 3)을 반환한다. 

그러나 3X1 행렬 B의 형상은 B.shape을 통해 (3,)을 반환한다. 즉, 1이 생략된다는 것이다.

stackoverflow에 비슷한 질문이 남겨져 있었고, 답변도 달려 있었다. 알게 된 내용을 추가해서 정리해본다.

 

stackoverflow에 올라온 질문

<질문 내용>

(N,1)과 (N,)의 형상을 가진 numpy 배열의 차이가 뭔가요? 두 배열 모두 NX1 행렬이지 않나요?

가끔씩 계산 결과가 두 배열 중 하나를 반환해서 여쭤봅니다.  

 

 

<정리>

정리하기 앞서, 배열의 차원은 아래와 같다.

(사진 출처는 글 하단에 있다)

배열의 차원 (1차원, 2차원 3차원)

 

 

(N,1)과 (N,)은 차원이 다르다.

(N,)1차원 배열을 의미한다.

#1차원 배열

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

 

(N,1)2차원 배열을 의미한다. 하지만 1차원 속에는 원소 한개만 존재하는 상태다. 

아래는 (1,N) 배열이다.

#2차원 배열

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

 

(1,N) 배열을 전치해서 (N,1) 배열을 만들 수 있다.

#2차원 배열 전치(Transposing)
np.array([[1, 2, 3]]).T.shape
#(3, 1)

np.array([[1, 2, 3]]).T
#array([[1],
#       [2],
#       [3]])

.T 메서드는 transposing의 약자로, 전치 행렬(轉置行列, transposed matrix)을 만들어준다.

.T 메서드를 통해 만들어진 위의 배열은 2차원 배열의 첫 번째 열만 채워져있는 배열이다.

 

 

그런데 .T 메서드는 1차원 배열에 적용되지 않는다. 아래의 예시를 보자.

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

print(A)   #[[1 2 3]]
print(A.shape)   #(1, 3)
print(B)   #[[1]
           # [2]
           # [3]]
print(B.shape)   #(3, 1)
print(A*B)   #[[1 2 3]
             # [2 4 6]
             # [3 6 9]]
print(A+B)   #[[2 3 4]
             # [3 4 5]
             # [4 5 6]]

##########################################

C = np.array([1, 2, 3])   
D = np.array([1, 2, 3]).T 

print(C)   #[1 2 3]
print(C.shape)   #(3,)
print(D)   #[1 2 3]
print(D.shape)   #(3,)
print(C*D)   #[1 4 9]
print(C+D)   #[2 4 6]

### 주석 선을 기준으로 위는 2차원 배열을 전치한 것, 아래는 1차원 배열을 전치한 것이다. 

1차원 배열은 2차원 배열과 달리 transposing이 적용되지 않는다. 

 

또한 NX1 배열과 같은 형식은 1차원으로 표현할 수 없다.

1차원 배열1XN 배열만 지원한다. 아이러니하게 표기는 (N,)로 한다.

즉, 1차원 배열을 표기할 때 (N,) 표기법은 존재하지만 (,N) 표기법은 존재하지 않는다는 것이다.

 

numpy 라이브러리의 행렬 개념을 공부하면서 헷갈리는 점을 정리해보았다. 

 

 


<출처>

https://stackoverflow.com/questions/16995071/numpy-array-that-is-n-1-and-n

 

<사진 출처>

배열 차원

http://taewan.kim/post/numpy_cheat_sheet/

 

'Study > 책『밑바닥부터 시작하는 딥러닝』' 카테고리의 다른 글

4-2. 신경망 학습  (0) 2020.03.25
4-1. 신경망 학습  (0) 2020.03.16
3-2. 신경망  (0) 2020.03.09
3-1. 신경망  (0) 2020.03.07
2. 퍼셉트론(Perceptron)  (0) 2020.03.02

댓글