一、函數基本介紹
np.reshape函數是numpy庫中的一個重要的函數,用於改變數組的形狀,將一個數組變換為指定的大小。作用類似於resize,但會返回一個新的數組,而不是改變原數組的形狀。
該函數有三個參數,分別是要變換的數組、目標形狀以及一個可選參數。目標形狀可以是一個整數、元組或列表,用於指定數組轉換後的大小。可選參數為order,表示數組在內存中的存儲方式,默認為’C’,即按行排列。
import numpy as np # 創建一個3x3的矩陣 a = np.arange(9).reshape(3, 3) # 將其變換為一維數組 b = a.reshape(9) # 輸出變換後的結果 print(b)
運行結果如下:
[0 1 2 3 4 5 6 7 8]
二、改變數組的形狀
np.reshape函數可以靈活地改變數組的形狀,從而滿足不同的需求。下面介紹幾種典型的情況。
1、將一維數組變為矩陣
當我們有一個一維數組,需要將其變為矩陣時,可以使用reshape函數指定目標形狀。因為矩陣的大小要滿足行數和列數的乘積等於元素數量,所以目標形狀需要滿足這個條件。
import numpy as np # 創建一個一維數組 a = np.arange(9) # 將其變為3x3的矩陣 b = a.reshape(3, 3) # 輸出變換後的結果 print(b)
運行結果如下:
[[0 1 2] [3 4 5] [6 7 8]]
2、改變矩陣的行列
當我們需要改變一個矩陣的行列時,可以使用reshape函數指定目標形狀,其中行數和列數可以交換。
import numpy as np # 創建一個3x4的矩陣 a = np.arange(12).reshape(3, 4) # 將其變為4x3的矩陣 b = a.reshape(4, 3) # 輸出變換後的結果 print(b)
運行結果如下:
[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]]
3、扁平化數組
當我們需要將一個多維數組變為一維數組時,可以使用reshape函數指定目標形狀為-1。這樣reshape函數會自動計算目標形狀中的一個維度,使得改變後的數組為一維數組。
import numpy as np # 創建一個2x3x4的三維數組 a = np.arange(24).reshape(2, 3, 4) # 將其變為一維數組 b = a.reshape(-1) # 輸出變換後的結果 print(b)
運行結果如下:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
三、指定存儲方式
np.reshape函數默認按行排列數組元素,也就是按照內存中的存儲方式。但是在一些應用場合下,我們需要按照列排列數組元素,或者按照其他方式排列。此時,可以使用可選參數order指定數組在內存中的存儲方式。
1、按列排列數組元素
當我們需要按列排列數組元素時,可以使用order參數指定為’F’。
import numpy as np # 創建一個3x3的矩陣 a = np.arange(9).reshape(3, 3) # 按列排列數組元素 b = a.reshape(9, order='F') # 輸出變換後的結果 print(b)
運行結果如下:
[0 3 6 1 4 7 2 5 8]
2、按指定方式排列數組元素
當我們需要按照其他方式排列數組元素時,可以使用order參數指定為’default’、’C’或其他值。其中,’default’和’C’都表示按行排列數組元素。
import numpy as np # 創建一個3x3的矩陣 a = np.arange(9).reshape(3, 3) # 按指定方式排列數組元素 b = a.reshape(9, order='default') # 輸出變換後的結果 print(b)
運行結果如下:
[0 1 2 3 4 5 6 7 8]
四、應用舉例
np.reshape函數在很多數據處理的場合都可以派上用場。下面介紹幾種常見的應用場景。
1、圖像處理
在圖像處理中,需要將原始圖像轉換為一維向量進行處理,然後再將處理結果轉換為圖像進行顯示。這時,就可以使用reshape函數實現轉換。
import cv2 import numpy as np # 讀取一張圖像 img = cv2.imread('test.jpg') # 將圖像變為一維向量 vec = img.reshape(-1) # 對向量進行處理 vec /= 2 # 將處理結果轉換為圖像 img2 = vec.reshape(img.shape) # 顯示圖像 cv2.imshow('img2', img2) cv2.waitKey(0) cv2.destroyAllWindows()
2、機器學習
在機器學習中,需要將原始數據轉換為二維數組進行處理,然後再將處理結果轉換為原始格式進行輸出。這時,就可以使用reshape函數實現轉換。
import numpy as np # 讀取原始數據 data = np.loadtxt('data.txt') # 將數據變為2維數組 X = data[:, :-1] y = data[:, -1] # 對數據進行處理 ... # 將處理結果轉換為原始格式 data2 = np.concatenate((X, y.reshape(-1, 1)), axis=1) # 輸出處理結果 np.savetxt('data2.txt', data2, fmt='%.2f')
五、總結
通過本文的介紹,我們了解了np.reshape函數的基本用法和常見應用場景。該函數可以靈活地改變數組的形狀,以適應不同的需求。同時,我們還學習了如何指定數組在內存中的存儲方式,以及如何將數組與圖像和機器學習數據進行轉換。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/205901.html