數組的形狀是每個維中元素的數量。
打印 2-D 數組的形狀:
import numpy as np arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) print(arr.shape)
運行結果
(2, 4)
上面的實例返回 (2, 4),這意味著該數組有 2 個維,每個維有 4 個元素。
利用 ndmin 使用值 1,2,3,4 的向量創(chuàng)建有 5 個維度的數組,并驗證最后一個維度的值為 4:
import numpy as np arr = np.array([1, 2, 3, 4], ndmin=5) print(arr) print('shape of array :', arr.shape)
運行結果
[[[[[1 2 3 4]]]]] shape of array : (1, 1, 1, 1, 4)
每個索引處的整數表明相應維度擁有的元素數量。
上例中的索引 4,我們的值為 4,因此可以說第 5 個 ( 4 + 1 th) 維度有 4 個元素。
數組的形狀是每個維中元素的數量。通過修改數組形狀,我們可以添加或刪除維度或更改每個維度中的元素數量。
將以下具有 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 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
將以下具有 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)
運行結果
[[[ 1 2] [ 3 4] [ 5 6]] [[ 7 8] [ 9 10] [11 12]]]
是的,只要重塑所需的元素在兩種形狀中均相等。
我們可以將 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)
運行結果
Traceback (most recent call last): File "test.py", line 5, in
您可以使用一個“未知”維度。
這意味著您不必在 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 2] [3 4]] [[5 6] [7 8]]]
展平數組(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)
運行結果
[1 2 3 4 5 6]
有很多功能可以更改 numpy flatten、ravel 中數組形狀,還可以重新排列元素 rot90、flip、fliplr、flipud 等。這些功能屬于 numpy 的中級至高級部分。