NumPy 中 reshape() 和 resize() 方法的區別
NumPy 陣列的大小可以透過 Python 中的兩個函式(reshape 和 resize)來改變。它們之間只有一個區別,即使用 resize() 時原始陣列保持不變,而 reshape() 僅返回更改後的陣列,原始陣列保持不變。
語法
Reshape()
reshape(x,y)
在此語法中,x 指定要從提供的較大的輸入陣列中建立的較小陣列的數量,y 表示陣列中存在的元素的實際數量。
如果值是實際的,則該方法返回一個修改後的陣列,如果陣列無法細分為指定數量的較小陣列,則返回錯誤。
Resize()
resize(x,y)
在確定 x 和 y 引數時,該函式與 reshape() 函式非常相似。返回模式也保持相同。
此外,原始陣列會永久更改。
示例 1
這解釋了 reshape() 屬性用於運算元組特徵的使用。在此示例中,一個包含 8 個元素的陣列被重新整形,使其被劃分為 4 個較小的陣列,每個陣列包含 2 個元素。
演算法
步驟 1:匯入 numpy 為 np
步驟 2:從給定陣列建立 NumPy 陣列。
步驟 3:透過傳遞每個較小陣列中的元素數量和此類較小陣列的數量來使用 reshape 函式。
步驟 4:列印陣列。
示例
#import numpy
import numpy as np
#create a numpy array with values of the array.
data = np.array([10, 20, 30, 40, 50, 60, 70, 80])
#print the contents of the original numpy array
print("Original array: ")
display(data)
#reshape the array into a 4x2 matrix and display it.
print("Reshaped array: ")
display(data.reshape(4, 2))
#print the original array
print("Original array:")
display(data)
輸出
Original array:
array([10, 20, 30, 40, 50, 60, 70, 80])
Reshaped array:
array([[10, 20],
[30, 40],
[50, 60],
[70, 80]])
從輸出中,我們可以看到即使在使用 reshape() 之後,原始陣列也保持不變。更改是在緩衝區陣列中進行的,該陣列具有所需的維度。
示例 2
此程式碼解釋了 resize() 屬性用於運算元組特徵的使用。這裡,一個包含 8 個元素的陣列被調整大小,使其被劃分為 4 個數組,每個陣列包含 2 個元素。請注意,更改是在原始陣列本身中進行的。
演算法
步驟 1:匯入 numpy 為 np
步驟 2:從給定陣列建立 NumPy 陣列。
步驟 3:透過傳遞每個較小陣列中的元素數量和此類較小陣列的數量來使用 resize 函式。
步驟 4:列印陣列。
示例
#import numpy
import numpy as np
#create a numpy array with values of the array
data = np.array([10, 20, 30, 40, 50, 60, 70, 80])
#print the contents of the original array
print("Original array: ")
display(data)
#resize the array into a 4x2 matrix
print("Resized array: ")
display(data.resize(4, 2))
#print the original array
print("Original array:")
display(data)
輸出
Original array:
array([10, 20, 30, 40, 50, 60, 70, 80])
Resized array:
None
Original array:
array([[10, 20],
[30, 40],
[50, 60],
[70, 80]])
我們可以觀察到,沒有單獨提供的調整大小的陣列,並且原始陣列本身被操作以匹配使用者在 resize 函式中作為引數提到的維度。
主要區別
| 屬性 | Reshape | Resize |
|---|---|---|
| 功能 | 如果陣列不能被細分為指定的子陣列數量,則 reshape 屬性會丟擲 ValueError。每當陣列缺少足夠的元素時,都會觀察到 ValueError。 | 對於 reshape 屬性,它會新增 0 來填充陣列,使其正好可以被使用者提到的片段數量整除。 |
| 就地切換 | 對於 reshape(),會建立現有陣列的副本,並將維度更改應用於陣列的副本。因此,原始陣列的維度沒有變化 | resize() 方法使用就地修改,因此原始陣列會被覆蓋。 |
結論
在不需要保留原始陣列的情況下,可以使用 reshape() 或 resize() 這兩種方法。但是,如果傳遞給函式的引數與陣列的實際大小不匹配,或者陣列缺少那麼多元素,則會引發錯誤。
如果必須保持原始陣列不變,則首選 Reshape 而不是 Resize。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP