Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Numpy에서 Flatten()과 Ravel()의 차이점

<시간/>

numpy 배열을 만드는 방법에는 여러 가지가 있습니다. Numpy는 ndarray를 1Darray로 변환하는 두 가지 방법을 제공합니다. 하나는 flatten() 메서드를 사용하는 것이고 다른 하나는 ravel() 메서드를 사용하는 것입니다.

#Import required library, numpy
import numpy as np
#create an array from a list
arr = np.array( [ (2, 7, 3, 4), (5, 6, 9, 1)])
#flatten_output
print(arr.flatten())
#ravel_output
print(arr.ravel())

출력

[2 7 3 4 5 6 9 1]
[2 7 3 4 5 6 9 1]

이제 위에서 우리는 두 함수가 동일한 목록을 반환한다는 것을 알 수 있습니다. 따라서 동일한 작업에 대해 왜 두 가지 방법이 사용되는지에 대한 질문이 생깁니다.

다음은 flatten()과 ravel() 메서드의 주요 차이점입니다.

arr.ravel()

  • 원래 배열의 유일한 참조 반환

  • 위의 배열(arr)을 수정하면 원래 배열의 값도 변경되는 것을 볼 수 있습니다.

  • ravel 메소드는 메모리를 차지하기 때문에 ravel이 flatten()보다 빠릅니다.

  • Ravel은 라이브러리 수준 함수입니다.

arr.flatten()

  • array(arr)의 원본을 반환합니다.

  • 위의 배열(arr)을 수정해도 원래 배열의 값은 변하지 않습니다.

  • flatten()이 메모리를 차지하기 때문에 flatten()은 ravel()보다 약간 느립니다.

  • ndarray 객체의 메소드입니다.

#Import required library, numpy
import numpy as np
# Create a numpy array, arr
arr = np.array([(1,2,3,4),(3,1,4,2)])
# Let's print the array arr
print ("Original array:\n ", arr)
#print(arr)
# To check the dimension of array (dimension =2) and type is numpy.ndarray
print ("Dimension of original array: %d \n Type of original array: %s" % (arr.ndim,type(arr)))
print("\nOutput from ravel method: \n")
# Convert nd array to 1D array
b_arr = arr.ravel()
# Ravel only passes a view of original array to array 'b_arr'
print(b_arr)
b_arr[0]=1000
print(b_arr)
# Note here that value of original array 'arr' at also arr[0][0] becomes 1000
print(arr)
# Just to check the dimension i.e. 1 and type is same numpy.ndarray
print ("Dimension of array: %d \n Type of array: %s" % (b_arr.ndim,type(b_arr)))
print("\nOutput from flatten method: \n")
# Convert nd array to 1D array
c_arr = arr.flatten()
# Flatten passes copy of original array to 'c_arr'
print(c_arr)
c_arr[0]=0
print(c_arr)
# Note that by changing value of c_arr there is no affect on value of original array 'arr'
print(arr)
print ("Dimension of array->%d \n Type of array->%s" % (c_arr.ndim,type(c_arr)))

출력

Original array:
[[1 2 3 4]
[3 1 4 2]]
Dimension of original array: 2
Type of original array: <class 'numpy.ndarray'>
Output from ravel method:
[1 2 3 4 3 1 4 2]
[1000 2 3 4 3 1 4 2]
[[1000 2 3 4]
[ 3 1 4 2]]
Dimension of array: 1
Type of array: <class 'numpy.ndarray'>
Output from flatten method:
[1000 2 3 4 3 1 4 2]
[0 2 3 4 3 1 4 2]
[[1000 2 3 4]
[ 3 1 4 2]]
Dimension of array->1
Type of array-><class 'numpy.ndarray'>