.ravel() 과 .flatten() 의 기능이 비슷해 아래와 같이 정리했다.
.ravel()
# 이런 shape의 넘파이 배열이 있을 때
x = array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# 옵션 'C'
np.ravel(x, order='C') # default 값
...:
# Out: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
# 옵션 'K'
np.ravel(x, order='K')
...:
# Out: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
# 옵션 'F'
np.ravel(x, order='F')
...:
# Out: array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])
# 3차원 배열일 때 사용 예시
# 이런 배열이 있을 때
x = array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]]])
# 옵션 'C'
np.ravel(x, order='C')
...:
# Out: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
# x 배열의 축이 바뀌었을 때
x = array([[[ 0, 2, 4],
[ 1, 3, 5]],
[[ 6, 8, 10],
[ 7, 9, 11]]]) # x = x.swapaxes(1, 2)
# 옵션 'K'
np.ravel(x, order='K')
...:
# Out: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
.flatten()
Tip❗ .flatten( )은 데이터의 copy를 생성하기 때문에, ravel( ) 보다 느리고, 더 많은 메모리를 필요로 한다. 그러나 원본 데이터가 의도치 않게 변경되지 않도록 보호한다. Task에 따라 적절히 골라 사용할 것.