[Python NumPy] 배열을 옆으로, 위 아래로 붙이기 : np.r_, np.c_, np.hstack(), np.vstack(), np.column_stack(), np.concatenate(axis=0), np.concatenate(axis=1)
Python 분석과 프로그래밍/Python 데이터 전처리 2018. 4. 14. 00:23이번 포스팅에서는 Python의 numpy 라이브러리에 있는 함수들을 이용해서 두 개의 배열(array)을 옆으로 붙이기, 배열을 위 아래로 붙이기(concatenate) 하는 방법에 대해서 소개하겠습니다. 알아두면 편리하게 배열을 조작할 수 있는 유용한 함수들입니다.
(1) 두 배열을 왼쪽에서 오른쪽으로 붙이기
: np.r_[a, b]
: np.hstack([a, b])
: np.concatenate((a, b), axis = 0)
(2) 두 배열을 위에서 아래로 붙이기
: np.r_[[a], [b]]
: np.vstack([a, b])
: np.concatenate((c, d), axis = 1) # for 2D ~ array
(3) 두 개의 1차원 배열을 칼럼으로 세로로 붙여서 2차원 배열 만들기
(Stack 1-D arrays as columns into a 2-D array)
: np.c_[a, b]
: np.column_stack([a, b])
: np.concatenate((c.T, d.T), axis = 1) # for 2D~ array
[ 배열을 옆으로, 위 아래로 붙이기 : np.r_, np.c_, np.hstack(), np.vstack(), np.column_stack(), np.concatenate(axis=0), np.concatenate(axis=1) ]
처음에 np.r_[a, b], np.c_[a, b] 코드를 봤을 때 '이게 뭐지?', '잘못 타이핑한거 아닌가?', '쓰다 말았나?' 하고 갸우뚱 했던 기억이 납니다. ^^;
아래에 간단한 예를 들어서 설명하겠습니다.
np.r_[], np.c_[] 는 코드가 완전 간단한 장점이 있구요, np.hstack(), np.vstack(), np.column_stack() 는 코드 이해가 쉬운 장점이 있는데요, 코드 작성하시는 분의 선호도에 따라 골라 쓰시면 되겠습니다.
먼저 numpy 라이브러리 importing 한 후에 a, b 두 개의 예제 배열(array)을 만들겠습니다.
In [1]: import numpy as np In [2]: a = np.array([1, 2, 3]) In [3]: b = np.array([4, 5, 6])
|
(1) 두 배열을 왼쪽에서 오른쪽으로 붙이기
: np.r_[a, b] <- ( ) 를 사용하지 않고 [ ] 를 사용하는 것에 주의하세요
: np.hstack([a, b])
: np.concatenate((a, b), axis=0)
In [4]: np.r_[a, b]
Out[4]: array([1, 2, 3, 4, 5, 6]) |
In [7]: np.hstack([a, b]) Out[7]: array([1, 2, 3, 4, 5, 6]) |
In [23]: np.concatenate((a, b), axis = 0) Out[23]: array([1, 2, 3, 4, 5, 6]) |
(2) 두 배열을 위에서 아래로 붙이기
: np.r_[[a], [b]] <- a, b 배열을 [ ]을 사용해서 1-D 배열로 만든거 주의하세요
: np.vstack([a, b])
: np.concatenate((c, d), axis = 1) <- 1D 배열은 "AxisError: axis 1 is out of bounds for array of dimension 1"라는 AxisError가 나네요. 2D 이상 배열은 에러 없이 잘 되구요.
In [5]: np.r_[[a], [b]] Out[5]: array([[1, 2, 3],
[4, 5, 6]])
|
In [8]: np.vstack([a, b]) Out[8]: array([[1, 2, 3],
[4, 5, 6]])
|
In [27]: c = np.array([[0, 1, 2], [3, 4, 5,]]) ...: d = np.array([[6, 7, 8], [9, 10, 11]]) In [28]: np.concatenate((c, d), axis = 1) # for 2D~ array Out[28]: array([[ 0, 1, 2, 6, 7, 8], [ 3, 4, 5, 9, 10, 11]]) |
(3) 두 개의 1차원 배열을 칼럼으로 세로로 붙여서 2차원 배열 만들기
(Stack 1-D arrays as columns into a 2-D array)
: np.c_[a, b]
: np.column_stack([a, b])
: np.concatenate((c.T, d.T), axis = 1) # for 2D~ array
In [6]: np.c_[a, b] Out[6]: array([[1, 4], [2, 5],
[3, 6]])
|
In [9]: np.column_stack([a, b]) Out[9]: array([[1, 4], [2, 5],
[3, 6]]) |
np.concatenate(axis=1) 은 1D array 로 하면 AxisError 가 납니다. 2D array 이상에 대해서 사용하세요.
In [27]: c = np.array([[0, 1, 2], [3, 4, 5,]]) ...: d = np.array([[6, 7, 8], [9, 10, 11]]) In [29]: np.concatenate((c.T, d.T), axis = 1) Out[29]: array([[ 0, 3, 6, 9], [ 1, 4, 7, 10], [ 2, 5, 8, 11]]) |
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되셨다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^
'Python 분석과 프로그래밍 > Python 데이터 전처리' 카테고리의 다른 글
[Python] numpy 최소, 최대, 조건 색인값 : np.argmin(), np.argmax(), np.where() (7) | 2018.05.17 |
---|---|
[Python] numpy 집합함수 (set functions) (0) | 2018.05.17 |
[Python NumPy] 다차원 배열을 1차원 배열로 평평하게 펴주는 ravel(), flatten() 함수 (0) | 2018.02.18 |
[Python NumPy] reshape에서 -1 은 무슨 의미인가? (reshape(-1, 1)) (17) | 2018.01.25 |
[Python NumPy] 절대값 함수 np.abs(x), 부호 판별 함수 np.sign(x)를 이용해서 특이값(Outlier) 찾고 다른 값으로 대체하기 (0) | 2017.04.17 |