重塑陣列
numpy.reshape
(與 numpy.ndarray.reshape
相同)方法返回相同總大小的陣列,但是採用新形狀:
print(np.arange(10).reshape((2, 5)))
# [[0 1 2 3 4]
# [5 6 7 8 9]]
它返回一個新陣列,並且不能就地執行:
a = np.arange(12)
a.reshape((3, 4))
print(a)
# [ 0 1 2 3 4 5 6 7 8 9 10 11]
但是,它是可以覆蓋一個 ndarray
的 shape
屬性:
a = np.arange(12)
a.shape = (3, 4)
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
這種行為一開始可能會令人驚訝,但是 ndarray
s 儲存在連續的記憶體塊中,而它們的 shape
只指定了如何將這個資料流解釋為多維物件。
shape
元組中最多一個軸的值可以為 -1
。然後 numpy
會為你推斷出這個軸的長度:
a = np.arange(12)
print(a.reshape((3, -1)))
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
要麼:
a = np.arange(12)
print(a.reshape((3, 2, -1)))
# [[[ 0 1]
# [ 2 3]]
# [[ 4 5]
# [ 6 7]]
# [[ 8 9]
# [10 11]]]
多個未指定的尺寸,例如 a.reshape((3, -1, -1))
是不允許的,並且會丟擲一個 ValueError
。