NumPy 數組重塑

數組重塑

重塑意味著更改數組的形狀。

數組的形狀是每個維中元素的數量。

通過重塑,我們可以添加或刪除維度或更改每個維度中的元素數量。

從 1-D 重塑為 2-D

實例

將以下具有 12 個元素的 1-D 數組轉換為 2-D 數組。

最外面的維度將有 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)

運行實例

從 1-D 重塑為 3-D

實例

將以下具有 12 個元素的 1-D 數組轉換為 3-D 數組。

最外面的維度將具有 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 數組重塑為 2 行 2D 數組中的 4 個元素,但是我們不能將其重塑為 3 元素 3 行 2D 數組,因為這將需要 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 傳遞給一個以上的維度。

展平數組

展平數組(Flattening the arrays)是指將多維數組轉換為 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 的中級至高級部分。