当需要改变Numpy数组的形状时,我们可以使用Numpy库提供的reshape()和resize()方法。
reshape()方法
reshape()方法将Numpy数组的形状改变为指定的形状,但是不改变原数组的大小,返回的是一个新的数组。
语法:numpy.reshape(array, newshape, order='C')
参数解释:
- array:需要修改形状的数组。
- newshape:新的形状。
- order:可选参数,表示展开数组的顺序,C表示以C风格的方式展开,F表示以F风格的方式展开。
下面的示例展示了如何使用reshape()方法将一个4×4的2维数组转换成2个2×8的2维数组:
import numpy as np
# 创建一个4x4的2维数组
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
# 将数组reshape为两个2x8的数组
b = np.reshape(a, (2, 2, 8))
# 输出结果
print(b)
输出结果:
[[[ 1 2 3 4 5 6 7 8]
[ 9 10 11 12 13 14 15 16]]
[[ 1 2 3 4 5 6 7 8]
[ 9 10 11 12 13 14 15 16]]]
需要注意的是,reshape()方法返回的是一个新的数组,需要将其保存到变量中。
resize()方法
resize()方法将Numpy数组的大小和形状都改变为指定的值,并且可以改变原数组的大小,返回的也是原数组的引用。
语法:numpy.resize(a, new_shape)
参数解释:
- a:需要修改大小的数组。
- new_shape:新的大小和形状。
下面的示例展示了如何使用resize()方法将一个2×2的2维数组改变成2×4的2维数组:
import numpy as np
# 创建一个2x2的2维数组
a = np.array([[1, 2], [3, 4]])
# 将数组resize为2x4的2维数组
np.resize(a, (2, 4))
# 输出结果
print(a)
输出结果:
[[1 2 3 4]
[1 2 3 4]]
需要注意的是,resize()方法改变原数组的大小,如果新的大小比原来的大小小,那么多余的元素会被删除。同时,如果新的大小比原来的大小大,那么会将多余的元素复制并填充到数组的末尾。
综上所述,reshape()方法和resize()方法有以下几个区别:
- reshape()方法只改变数组的形状,不改变数组的大小,返回的是一个新的数组;而resize()方法不仅改变数组的形状,还改变数组的大小,返回的是原数组的引用。
- reshape()方法返回的是一个新的数组,需要将其保存到变量中;而resize()方法返回的是原数组的引用,不需要保存到变量中。
- 当新的形状的元素个数和原来的元素个数不同时,reshape()方法会抛出异常,而resize()方法会自动填充或删除多余的元素,使得数组大小和形状与新的大小和形状一致。