重塑数组
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
。