넘파이의 flatten 함수와 ravel 함수의 차이점은 무엇인가요?
import numpy as np
y = np.array(((1,2,3),(4,5,6),(7,8,9)))
OUTPUT:
print(y.flatten())
[1 2 3 4 5 6 7 8 9]
print(y.ravel())
[1 2 3 4 5 6 7 8 9]
두 함수는 모두 동일한 목록을 반환합니다.
그렇다면 같은 작업을 수행하는 두 가지 다른 함수가 필요한 이유는 무엇일까요?
답변 1
현재 API는 다음과 같습니다.
flatten는 항상 사본을 반환합니다.
ravel은 가능한 경우 원래 배열의 뷰를 반환합니다. 이는 출력된 결과에서는 볼 수 없지만, ravel에 의해 반환된 배열을 수정하면 원래 배열의 항목이 수정될 수 있습니다. flatten에서 반환된 배열의 항목을 수정하면 이러한 일이 결코 발생하지 않습니다. 메모리가 복사되지 않으므로 ravel이 종종 더 빠르지만, 반환된 배열을 수정하는 데 더 주의해야합니다.
이상한 문자^&!^*@$&은 배열의 걸음이 허용하는 모든 경우에보기를 얻지만, 이는 단일 배열을 얻지 못하는 경우도 있음을 의미합니다.
답변 2
넘파이(Numpy)는 데이터 배열 처리를 위한 파이썬 라이브러리입니다. 넘파이의 배열은 다른 프로그래밍 언어에서의 배열과는 달리 크기가 변하지 않는 다차원 배열입니다. 따라서 넘파이의 배열은 빠르고 효율적인 데이터 처리를 가능하게 합니다.넘파이는 배열을 다루는 많은 함수를 제공합니다. 그 중에서도 flatten 함수와 ravel 함수는 많이 사용되는 함수 중 하나입니다. 그러나 flatten 함수와 ravel 함수는 비슷해 보이지만 실제로는 다른 기능을 수행합니다.
flatten 함수는 다차원 배열을 1차원 배열로 평탄화합니다. 즉, 배열의 모든 요소를 한 줄로 나열하고 새로운 배열을 반환합니다. 이는 해당 배열의 모든 요소에 대한 동일한 작업을 수행할 때 유용합니다. 예를 들어, 이미지 처리에서 모든 픽셀 값을 하나의 배열로 가져올 때 flatten 함수를 사용할 수 있습니다.
ravel 함수는 flatten 함수와 유사하지만, 반환된 배열은 원래 배열의 뷰(view)입니다. 이것은 ravel 함수를 사용하여 생성된 배열을 수정하면 원래 배열도 수정된다는 의미입니다. 따라서 ravel 함수는 기존의 배열과 함께 사용할 때 유용합니다. 예를 들어, 이미지 처리에서 다시 2차원 배열로 변환해야 할 때 ravel 함수를 사용할 수 있습니다.
요약하자면, flatten 함수와 ravel 함수는 모두 다차원 배열을 1차원으로 평탄화하는 기능을 수행하지만, flatten 함수는 새로운 배열을 반환하고 ravel 함수는 원래 배열의 뷰를 반환합니다. 이러한 함수를 사용하여 배열을 다룰 때 데이터 처리의 효율성과 유연성을 높일 수 있습니다.