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 方法不佔用任何記憶體,因此它比 flatten() 速度更快

  • Ravel 是一個庫級函式

arr.flatten()

  • 返回陣列(arr)的原始副本。

  • 透過修改上面的陣列(arr),原始陣列將不會改變。

  • 由於 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'>

更新日期: 2019-07-30

248 次瀏覽

開啟你的 職業生涯

完成課程即可獲得認證

開始
廣告
© . All rights reserved.