본문 바로가기
Python

[NumPy] ravel() 메서드 with flatten() 메서드

by ds31x 2024. 9. 9.

NumPy의 ndarray.ravel() 메서드는

  • 다차원 배열을 1차원 배열로 평탄화(flatten)하는 데 사용됨.
  • 기본적으로 이 메서드는 원본 배열의 데이터에 대한 뷰(view)를 반환: 즉 복사본을 생성하지 않고 메모리를 절약함.
  • 그러나, 원본 배열이 연속적이지 않은 메모리 레이아웃을 가지고 있을 때는 복사본을 만들어 반환할 수도 있음.
더보기

영어에서 “ravel”이라는 단어는 두 가지 상반된 의미를 가지고 있음:

 

1. 풀다, 해체하다 (to untangle or unravel): 이 의미는 주로 실이나 옷감이 얽혀 있을 때 그것을 풀어내는 행위를 가리킴. 예를 들어, 엉킨 실을 정리하거나 뭉쳐 있는 것을 펴는 과정을 설명할 때 사용됨.

2. 얽히게 하다 (to entangle or complicate): 이 경우에는 오히려 무언가를 더 복잡하게 만드는 행위를 나타냄. 이는 일종의 아이러니로, 앞서 말한 단어가 가지는 의미에 대한 반대임.

 

NumPy에서 ravel 함수는 첫 번째 의미, 즉 다차원 배열을 간단하게 1차원 배열로 “풀어내는” 동작을 수행하는 데 사용됨.
이는 복잡한 배열 구조를 단순화하여 처리할 수 있도록 해 줌.


ndarray.ravel()의 특징:

  • 비파괴적: 원본 배열의 데이터를 복사하지 않고 view를 생성.
    • 데이터 복사: 원본 데이터의 메모리 레이아웃이 비연속적인 경우에는 데이터가 복사됨.
  • 반환 타입: 항상 flatten이 이루어진 1차원 배열을 반환.

사용 예시:

import numpy as np

# 2D 배열 생성
array2d = np.array([[1, 2, 3], [4, 5, 6]])

# ravel()을 사용하여 1차원 배열로 평탄화
flattened_array = array2d.ravel()

print("Original Array:\n", array2d)
print("Flattened Array:\n", flattened_array)

출력:

Original Array:
 [[1 2 3]
 [4 5 6]]
Flattened Array:
 [1 2 3 4 5 6]

ravel() vs. flatten():

  • ravel()은 가능한 경우 원본 배열의 뷰를 반환하고 메모리 레이아웃이 비연속적일 경우에만 복사본을 반환.
  • flatten()은 항상 원본 배열의 복사본을 생성하여 반환. 따라서 메모리 사용이 더 많지만, 반환된 배열을 수정해도 원본 배열에 영향을 주지 않음.

같이 보면 좋은 자료들

2024.03.15 - [Python] - [DL] Tensor: dtype 변경(casting) 및 shape 변경.

 

[DL] Tensor: dtype 변경(casting) 및 shape 변경.

Tensor를 추상화하고 있는 class로는 numpy.array: numpy의 ndarray torch.tensor tensorflow.constant: (or tensorflow.Variable) 이 있음. 이들은 Python의 sequence types과 달리 일반적으로 다음과 같은 특징을 지님. 데이터들

ds31x.tistory.com

 

 

2024.09.09 - [Python] - [NumPy] 생성 및 초기화, 기본 조작 (1)

 

[NumPy] 생성 및 초기화, 기본 조작 (1)

1. ndarray 생성하기 (=tensor생성하기)np.array ( seq [,dtype])list 나 tuple 등의 sequence 객체로부터 ndarray 생성.dtype : data type of element.float64 : default type in the numpy. *uint8 : unsigned int (8bit), the most commonly used for im

ds31x.tistory.com


 

728x90