[python] 파이썬 ravel() 배열 1차원 변경 메소드 정리

jaylnne·2022년 5월 6일
0

Python

목록 보기
5/6

🤔 ravel()

.ravel().flatten() 의 기능이 비슷해 아래와 같이 정리했다.

1) 공통점

  • 다차원 배열(array)을 1차원 배열(array)로 평평하게 펴주는 넘파이(numpy) 함수
  • 1차원 배열을 다차원 배열로 바꾸는 .reshape()과 반대의 기능을 하는 함수라고 보면 됨

2) 차이점

.ravel()

  • order 옵션 값으로 'C', 'K', 'F'가 있다. (아래 첫 번째 예시)
  • 옵션 'C'와 'K'의 차이는 3차원 배열 이상일 때 확인할 수 있다. (아래 두 번째 예시)
  • 복사본을 생성하지 않는다. 즉, ravel() 이 리턴한 배열을 수정하면 원본 배열도 함께 수정하는 것이 된다.
  • numpy 라이브러리 수준 함수이다.
# 이런 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()

  • 항상 복사본을 return 한다. 즉, flatten()을 거친 배열을 수정해도 원본 배열은 수정되지 않는다.
  • numpy의 ndarray 클래스의 메소드이다.

Tip❗  .flatten( )은 데이터의 copy를 생성하기 때문에, ravel( ) 보다 느리고, 더 많은 메모리를 필요로 한다. 그러나 원본 데이터가 의도치 않게 변경되지 않도록 보호한다. Task에 따라 적절히 골라 사용할 것.

profile
스스로 정한 목표에 도달하기 위해 달리는 걸 즐기는 사람 🏃‍♀️

0개의 댓글