一、np.ravel函數的基本介紹
numpy中的ravel()函數,可以將一個多維數組變成一個一維數組,這個一維數組包含了所有的原數組元素,且返回的是一個視圖,修改返回的數組會改變原始數組。下面是ravel()函數的基本語法和參數說明:
numpy.ravel(a, order = 'C')
參數:
a:數組
order:'C' 行序優先(默認), 'F' 列序優先,'A' 原順序,保留多維結構。
返回值:攜帶指定順序的一維數組,且數組的間隔保持原來的數組,如NumPy數組。但是,它返回的是一個視圖,而不是一個副本。這意味著,任何的修改都會影響原先的數組
二、np.ravel函數的多方面應用
1. np.ravel用於快速展開一個多維數組
在實際應用中,有時我們需要將一個多維數組展開成一維數組,np.ravel函數可以很好地完成這項任務。
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
b = np.ravel(a)
print(b) # [1 2 3 4 5 6 7 8 9]
這裡我們定義了一個3×3的二維數組a, 然後通過np.ravel(a)函數將a轉化為一維數組b,輸出結果為[1 2 3 4 5 6 7 8 9].
2. np.ravel函數可用於降維後對數據進行分類或聚類
除了將多維數組展開為一維數組,還可以使用np.ravel函數進行特徵降維,然後對數據進行分類或者聚類。下面的例子演示了如何使用np.ravel進行降維:
import numpy as np
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
X = np.ravel(X)
X = X.reshape((len(X)//2,2))
pca = PCA(n_components=2)
X = pca.fit_transform(X)
clf = LogisticRegression(random_state=0).fit(X, y)
這裡我們使用了鳶尾花數據集,通過np.ravel函數將X的二維矩陣變成了一維數組進行特徵降維,然後使用邏輯回歸進行分類。
3. np.ravel函數在深度學習中的應用
在深度學習領域中,np.ravel函數可以用來將多維張量壓縮成一維向量,從而便於神經網路模型的傳遞和使用。下面我們以Keras框架中的LeNet-5模型為例,演示一下np.ravel在深度學習中的應用:
from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
from keras.models import Sequential
from keras.datasets import mnist
import numpy as np
(x_train, y_train), (x_test, y_test) = mnist.load_data()
print('原始數據的形狀:', x_train.shape) # (60000, 28, 28)
x_train_flat = np.ravel(x_train)
x_test_flat = np.ravel(x_test)
x_train = x_train_flat.reshape((-1, 28, 28, 1))
x_test= x_test_flat.reshape((-1, 28, 28, 1))
model = Sequential()
model.add(Conv2D(filters=6, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(filters=16, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(120, activation='relu'))
model.add(Dense(84, activation='relu'))
model.summary() # 查看模型結構
在以上的代碼中,我們首先使用np.ravel將圖片展開為一維向量,然後再通過reshape重組成二維數組,並設置第四個參數作為通道數。然後我們在Keras框架下面建立一個經典的LeNet-5模型,由兩個卷積層和三個全連接層的組成,其中注意到卷積層使用了3*3的卷積核和ReLU激活函數。對於MaxPooling層,它主要是為了減小特徵圖的大小,解決了特徵圖逐漸減小的尺度問題。
三、總結
本文從多角度對np.ravel函數進行了探討,它可以幫我們快速地從多維數組中提取數據、特徵降維和深度學習中的特徵壓縮。如果你在Python的數據科學和機器學習領域中,歡迎掌握好np.ravel函數,讓你的數據處理上手更加爐火純青!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/275799.html