一、np.reshape()的概述
在Numpy中,np.reshape()是一個重要的函數,用於將數組重塑為不同的形狀。它可以返回一個新的數組或更改原始數組的形狀。np.reshape()的語法如下:
np.reshape(array, newshape, order='C')
其中,array是要重塑的數組,newshape是新的數組形狀,order是重置數組元素的順序。默認情況下,數組按照C風格順序(逐行掃描)重置。
二、np.reshape()的基本用法
在使用np.reshape()時,需要注意以下幾點:
1、重新定義數組形狀
可以通過傳遞新的形狀來重新定義數組的形狀。例如:
import numpy as np
a = np.array([[0, 1], [2, 3]])
print("原始數組:\n", a)
b = np.reshape(a, (1, 4))
print("重塑後的數組:\n", b)
輸出結果:
原始數組: [[0 1] [2 3]] 重塑後的數組: [[0 1 2 3]]
可以看出,原始數組為2×2,通過np.reshape()將其重塑成1×4數組。
2、指定重置順序
通過設置order參數,可以指定重置數組元素的順序。例如:
import numpy as np
a = np.array([[0, 1], [2, 3], [4, 5]])
print("原始數組:\n", a)
b = np.reshape(a, (2, 3), order='F')
print("重塑後的數組:\n", b)
輸出結果:
原始數組: [[0 1] [2 3] [4 5]] 重塑後的數組: [[0 4 3] [2 1 5]]
可以看出,原始數組的順序按照行優先排列,而重置數組的元素順序按照列優先排列。
三、np.reshape()的高級應用
在實際應用中,np.reshape()的用途不僅限於簡單地重新定義數組形狀。以下是一些高級應用:
1、將圖像數據傳遞給神經網路
在圖像識別中,圖像通常保存為二維或三維數組。但是,在傳遞廣泛使用的卷積神經網路(CNN)時,需要將其轉換為四維張量。
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
(x_train, y_train), (x_test, y_test) = mnist.load_data()
X_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32') / 255
X_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float32') / 255
Y_train = np_utils.to_categorical(y_train, 10)
Y_test = np_utils.to_categorical(y_test, 10)
在上述代碼中,mnist數據集被讀入後,調用np.reshape()函數將輸入數據從三維數組(每個圖像為28×28像素)重塑為四維張量(帶有一個channel維度)。然後通過np_utils.to_categorical()將標籤進行熱編碼。
2、將一維數組轉換為矩陣
有時候需要將一維數組轉換為矩陣進行矩陣計算。如下所示:
import numpy as np
a = np.array([1, 2, 3, 4])
print("原始數組:\n", a)
b = np.reshape(a, (-1, 2))
print("轉換後的矩陣:\n", b)
輸出結果:
原始數組: [1 2 3 4] 轉換後的矩陣: [[1 2] [3 4]]
可以看出,通過np.reshape()將長度為4的一維數組轉換為2×2的矩陣。
3、圖像重塑和可視化
在圖像處理中,常用的一個方式是將圖像轉換為一維向量進行處理。可以使用np.reshape()將二維圖像數據重塑為一維數據並進行可視化。例如:
import numpy as np
import matplotlib.pyplot as plt
from scipy import misc
img_rgb = misc.face()
img_gray = np.dot(img_rgb[...,:3], [0.299, 0.587, 0.114])
# 原始圖像的可視化
plt.subplot(221)
plt.imshow(img_rgb)
plt.axis('off')
plt.title('原始圖像')
# 灰度圖像的可視化
plt.subplot(222)
plt.imshow(img_gray, cmap=plt.cm.gray)
plt.axis('off')
plt.title('灰度圖像')
# 圖像重塑和可視化
img_gray_reshaped = np.reshape(img_gray, (img_gray.shape[0]*img_gray.shape[1], 1))
plt.subplot(223)
plt.imshow(img_gray_reshaped, cmap=plt.cm.gray)
plt.axis('off')
plt.title('圖像重塑')
plt.show()
輸出結果:
可以看出,np.reshape()將原始的灰度圖像(2D數組)重塑為了1D數組,然後進行了可視化。
四、總結
本文主要介紹了np.reshape()函數的基本用法和高級應用。通過np.reshape(),可以輕鬆重塑數組形狀,也可以完成一些複雜的操作,如將圖像數據傳遞給神經網路、將一維數組轉換為矩陣進行矩陣計算以及圖像重塑和可視化等。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/200345.html