파이썬에서 numpy array로 행병합 열병합하는 법

파이썬에서 numpy array로 행병합 열병합하는 법

How to Bind in Row or Column numpy array

코드

import numpy as np

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

print(a)
print(b)
print(np.c_[a,b])
print(np.r_[a,b])

파이썬의 numpy 패키지는 무척 편리한 기능을 많이 제공한다. 다음의 스크린샷에서 보이다시피 객체 numpy.c_numpy.r_는 대괄호 [] 안에 들어간 배열들을 각각 열(column)병합, 행(row)병합한 배열이다. 여기서 이들이 메서드가 아님을 분명히 하고 넘어가자. 마치 메서드처럼 쓰고 있지만 어디까지나 대괄호 []로 묶인것들을 이미 병합한 배열에 지나지 않는다. 문법적으로 헷갈릴 수 있기 때문에 적어도 한 번은 제대로 숙지를 해야 에러도 금방 찾을 수 있을 것이다.

20191104_095611.png

또 하나 주의해야할 것은 배열을 만들어 줄 때 두겹의 [], 즉 [[]]로 묶어서 만들었다는 것이다. 이 경우 우리의 직관대로, 원하던대로 행병합과 열병합을 구현할 수 있었다. 반면 위의 코드와 같지만 한 겹의 대괄호 []로 배열을 만드는 다음의 코드를 실행해보고 그 결과를 살펴보자.

import numpy as np

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

print(a)
print(b)
print(np.c_[a,b])
print(np.r_[a,b])

20191104_102825.png

위의 직관적인 실행결과와 아래의 차이는 1차원 배열인가 2차원 배열인가에 있다. 위의 경우 배열을 만드는 단계에서 이미 우리 눈에 보이는대로 가로, 세로의 개념이 있지만 아래의 경우 벡터로 넘어갔기 때문에 우리 눈에 보이는 것과 다르게 나타나는 것이다. 이렇게 구현된 이유는 numpy 패키지가 수학에 특화되었기 때문이라고 받아들여도 무방하다. $$ \overrightarrow{v} = (\pi , 0.7) = \begin{bmatrix} \pi \\ 0.7 \end{bmatrix} $$ 이를테면 좌표평면, 그러니까 $2$ 차원 유클리드 공간의 어떤 벡터 $\overrightarrow{v}$ 는 성분이 $2$ 개인 벡터(1차원 배열)인 동시에 $\overrightarrow{v} \in \mathbb{R}^{2 \times 1}$ 행렬(2차원 배열)이므로 위와 같이 두 가지 표현 모두를 사용할 수 있다. numpy 패키지의 경우 좀 더 일반적인 표현에 대응할 수 있도록 행렬―더 나아가서는 텐서의 컨벤션을 따르는 것이다.

댓글