[Python NumPy] 다차원 배열을 1차원 배열로 평평하게 펴주는 ravel(), flatten() 함수
Python 분석과 프로그래밍/Python 데이터 전처리 2018. 2. 18. 00:59이번 포스팅에서는 파이썬에서 다차원 배열(array)을 1차원 배열로 평평하게 펴주는 NumPy의 ravel() 함수, flatten() 함수에 대해서 알아보겠습니다.
1차원 배열을 다차원 배열로 재구성/재배열 해주는 NumPy의 reshape() 함수와 반대의 기능을 하는 함수가 ravel(), flatten() 함수라고 보시면 되겠습니다.
기계학습 알고리즘 학습하다보면 가끔씩 ravel() 함수가 나오는데요, 이참에 order 옵션 'C', 'F', 'K' 별 기능에 대해서도 정리해서 알아두면 좋을 듯 합니다.
[ Python NumPy ravel() 함수 vs. reshape() 함수 ]
-- 2차원 배열 --
먼저 0 ~ 11 까지의 12개의 원소로 이루어진 3 x 4 배열을 만들어 보겠습니다.
In [1]: import numpy as np ...: x = np.arange(12).reshape(3, 4) ...: x ...: Out[1]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
|
위에서 만든 2차원 배열에 대해서 order='C', order='F', order='k'별로 순서대로 위의 배열 3*4 배열 x가 어떤 순서대로 평평하게 펴지는지 예제로 살펴보겠습니다.
(1) np.ravel(x, order='C') : C와 같은 순서로 인덱싱하여 평평하게 배열 (디폴트) |
In [2]: np.ravel(x, order='C') # by default ...: Out[2]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
|
(2) np.ravel(x, order='F') : Fortran과 같은 순서로 인덱싱하여 평평하게 배열 |
In [3]: np.ravel(x, order='F') ...:
Out[3]: array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])
|
(3) np.ravel(x, order='K') : 메모리에서 발생하는 순서대로 인덱싱하여 평평하게 배열 |
In [4]: np.ravel(x, order='K') ...: Out[4]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
|
-- 3차원 배열 --
3차원 이상의 배열에 대해서도 ravel() 함수를 사용해서 1차원 배열로 평평하게 펼 수가 있습니다. 이때 order 매개변수를 설정해줄 때 조금 주의가 필요합니다. 아래에 2*3*2 의 3차원 배열에 대해서 축이 어떻게 설정되어있느냐(배열 순서가 어떤가)에 따라서 order='C'와 order='K'를 선택해서 사용하면 되겠습니다.
(4) np.raver(y, order='C') : 3차원 배열의 평평하게 펴기 |
In [5]: y = np.arange(12).reshape(2, 3, 2) ...: y Out[5]: array([[[ 0, 1], [ 2, 3], [ 4, 5]], [[ 6, 7], [ 8, 9],
[10, 11]]])
|
In [6]: np.ravel(y, order='C') ...:
Out[6]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
|
(5) np.ravel(z, order='K') : 축이 바뀐 3차원 배열을 평평하게 펴기 |
In [7]: z = np.arange(12).reshape(2, 3, 2).swapaxes(1, 2) In [8]: z Out[8]: array([[[ 0, 2, 4], [ 1, 3, 5]], [[ 6, 8, 10],
[ 7, 9, 11]]])
|
In [9]: np.ravel(z, order='K') ...:
Out[9]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
|
이상으로 다차원 배열을 1차원 배열로 평평하게 펴주는 numpy.ravel(a, order='C', 'F', 'K') 함수에 대해서 알아보았습니다.
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^