重塑陣列

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]

但是,它可以覆蓋一個 ndarrayshape 屬性:

a = np.arange(12)
a.shape = (3, 4)
print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

這種行為一開始可能會令人驚訝,但是 ndarrays 儲存在連續的記憶體塊中,而它們的 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