Numpy中reshape()和resize()方法的区别

  • Post category:Python

当需要改变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()方法会自动填充或删除多余的元素,使得数组大小和形状与新的大小和形状一致。