一、ravel()函數定義
在NumPy(Numerical Python)中,ravel() 是一個用於將多維數組降為一維數組的函數。這個函數返回的是數組的一個視圖,即原來數組上的數據在新數組上的映射。這個函數非常實用,特別是在機器學習和數據科學領域。
二、ravel()函數的用法
在使用ravel()函數時,我們可以採用兩種方式。第一種方式是使用np.ravel(),其中np代表import numpy as np。第二種方法是利用數組的實例方法MyArray.ravel(),其中MyArray是數組的名稱。
這兩種方式的功能是完全相同的,都可以將數組降為一維數組。例如:
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) print(np.ravel(a)) # 輸出 [1 2 3 4 5 6] b = a.ravel() print(b) # 輸出 [1 2 3 4 5 6]
如上述代碼所示,ravel()函數將多維數組a降為一維數組並列印輸出。其中,np.ravel(a)是函數調用的方式,而a。ravel()則是數組實例MyArray的方法調用。我們得到了相同的結果[1 2 3 4 5 6]。
三、ravel()函數和flatten()函數的差別
NumPy數組庫中還有一個函數可以將多維數組降為一維數組——flatten()函數。flatten()與ravel()非常相似,但是它們之間有一些細微的差別。
首先,flatten()函數返回數組的一個副本,而ravel()函數返回的是一個視圖。其次,ravel()函數在降維過程中可能會共享內存,因此不需要複製數據(如果可能的話)。而flatten()函數則總是使用複製的方式,因此相對比較慢。
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) # flatten()函數的使用 b = a.flatten() print(b) # 輸出 [1 2 3 4 5 6] # ravel()函數的使用 c = np.ravel(a) print(c) # 輸出 [1 2 3 4 5 6] # 改變數組部分元素值 a[0, 0] = 100 print(b) # 輸出 [1 2 3 4 5 6] print(c) # 輸出 [100 2 3 4 5 6]
如上述代碼所示,flatten()函數返回的是副本,因此對原數組的改變不會影響到降為一維數組的b。而使用ravel()函數則不同,對它返回的數組c進行更改,會直接影響到原數組的值。
四、ravel()函數的高級用法
1. ravel()函數與nditer()函數配合使用
在NumPy中,數組的迭代可以使用兩種類型的迭代器nditer和flatiter。 nditer函數可用於不同數據類型(如數組)之間的交互。
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) for i in np.nditer(a): print(i, end=" ") b = np.ravel(a) for i in np.nditer(b): print(i, end=" ")
如上述代碼所示,使用for循環對多維數組a的元素進行遍歷;使用nditer()函數和ravel()函數將多維數組a降為一維數組並進行遍歷。兩種方式輸出結果相同。
2. ravel()函數與reshape()函數配合使用
reshape()函數可以改變數組的形狀。與ravel()函數一起使用,可以將數組升為多維數組和無序數組。示例代碼如下:
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.ravel(a).reshape((3, 2)) print(b)
如上述代碼所示,ravel()函數將多維數組a降為一維數組,然後使用reshape()函數將一維數組b升級為二維數組。輸出結果如下:
[[1 2] [3 4] [5 6]]
五、小結
本文對NumPy數組庫中的常用函數ravel()進行了詳細解釋,包括其定義、用法、與flatten()函數的差別以及高級用法。我們可以使用ravel()函數將多維數組降為一維數組,與nditer()函數或reshape()函數一起使用可以進行更高級的操作。
原創文章,作者:IFUXI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370293.html