NumPy 陣列重塑
重塑陣列
重塑是指改變陣列的形狀。
陣列的形狀是每個維度中的元素數量。
透過重塑,我們可以新增或刪除維度,或更改每個維度中的元素數量。
從 1D 重塑為 2D
示例
將以下具有 12 個元素的 1D 陣列轉換為 2D 陣列。
最外層維度將包含 4 個數組,每個陣列有 3 個元素
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(4, 3)
print(newarr)
自己動手試一試 »
從 1D 重塑為 3D
示例
將以下具有 12 個元素的 1D 陣列轉換為 3D 陣列。
最外層維度將包含 2 個數組,每個陣列包含 3 個子陣列,每個子陣列有 2 個元素
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(2, 3, 2)
print(newarr)
自己動手試一試 »
可以重塑成任意形狀嗎?
可以,只要重塑所需的元素在兩種形狀中相等。
我們可以將一個包含 8 個元素的 1D 陣列重塑為包含 4 個元素的 2D 陣列(2 行 4 列),但我們不能將其重塑為包含 3 個元素的 2D 陣列(3 行 3 列),因為後者需要 3x3=9 個元素。
示例
嘗試將具有 8 個元素的 1D 陣列轉換為具有 3 個元素的 2D 陣列(將引發錯誤)
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(3, 3)
print(newarr)
自己動手試一試 »
返回的是副本還是檢視?
示例
檢查返回的陣列是副本還是檢視
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr.reshape(2, 4).base)
自己動手試一試 »
上面的示例返回了原始陣列,所以它是一個檢視。
未知維度
您可以使用一個“未知”維度。
這意味著您不必在 reshape 方法中為其中一個維度指定確切的數字。
將 -1
作為值傳遞,NumPy 將為您計算該數字。
示例
將具有 8 個元素的 1D 陣列轉換為具有 2x2 元素的 3D 陣列
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 2, -1)
print(newarr)
自己動手試一試 »
注意: 我們不能將 -1
傳遞給多個維度。
展平陣列
展平陣列是指將多維陣列轉換為 1D 陣列。
我們可以使用 reshape(-1)
來實現此目的。
示例
將陣列轉換為 1D 陣列
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr = arr.reshape(-1)
print(newarr)
自己動手試一試 »
注意: NumPy 中有很多用於改變陣列形狀的函式,如 flatten
、ravel
,以及用於重新排列元素的函式,如 rot90
、flip
、fliplr
、flipud
等。這些屬於 NumPy 的中級到高階部分。