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

  • Post category:Python

当你使用Numpy处理多维数组时,reshape()和resize()都是重要的方法之一。虽然它们在某些方面是类似的,但它们也存在着一些区别。接下来,我将为你详细讲解Numpy中reshape()和resize()方法的区别。

Reshape()方法

reshape()方法用于调整数组的形状,即按照指定的维度重新构造数组的形状。它返回一个新的数组对象,而不是修改原始数组。对于多维数组,我们需要指定一个新的形状,该形状必须与原有形状兼容,即新形状大小和原有形状大小相等,否则它会引发一个异常。

语法

使用numpy库的reshape()方法,我们需要指定它要返回的新数组的形状:

np.reshape(arr, newshape, order='C')

其中,参数arr代表要被重构的数组,newshape参数是一个整数或整数元组,代表重构后的数组的形状,参数order是可选参数(默认为’C’),代表是以按行(C风格)还是按列(Fortran风格)的方式重构数组的。

示例

import numpy as np
# 原始数组为3*3的二维数组
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
# 使用reshape方法重构为一维数组(9个元素)
new_a = np.reshape(a, (9,))
print(new_a)

输出结果如下:

[1 2 3 4 5 6 7 8 9]

Resize()方法

resize()方法和reshape()方法很类似,但是它会修改原始数组。resize()方法不创建新的数组对象,而是直接修改原始的数组。如果新数组的大小比原始数组的大小大,那么新数组将是原始数组的副本,并用0填充多余的值。如果新数组的大小比原始数组的大小小,则它将从原始数组中删除一些元素,其余的元素将保留。

语法

使用numpy库的resize()方法,我们需要指定它要返回的新数组的形状:

np.resize(arr, new_shape)

其中,参数arr代表要被修改的数组,new_shape参数是一个整数或整数元组,代表修改后的数组的形状。

示例

import numpy as np
# 原始数组为3*3的二维数组
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
# 使用resize方法重构为一维数组(9个元素)
np.resize(a, (9,))
print(a)

输出结果如下:

[1 2 3 4 5 6 7 8 9]

区别

reshape() 方法仅仅是重构给定数组的形状而不改变原始数组,而resize()方法直接修改原始的数组。另外,如果我们尝试调整大小,结果可能会不同。如下所示:

import numpy as np
# 原始数组为3*3的二维数组
a = np.array([[1,2,3],[4,5,6],[7,8,9]])

#使用reshape方法,新size比旧size大
b = np.reshape(a, (9,))
print(b)

#使用resize方法,新size比旧size大
np.resize(a, (9,))
print(a)

#使用reshape方法,新size比旧size小
b = np.reshape(a, (4,2))
print(b)

#使用resize方法,新size比旧size小
np.resize(a, (4,2))
print(a)

输出结果如下:

[1 2 3 4 5 6 7 8 9]
[[1 2 3]
 [4 5 6]
 [7 8 9]
 [1 2 3]
 [4 5 6]
 [7 8 9]
 [1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

我们可以发现,使用reshape()方法调整大小并不会更改原始数组的大小,只会返回返回一个新的数组对象。而resize()方法则会直接修改原始数组。另外,由于resize()方法可以直接修改原始数组,所以当新数组大小比原始数组的大小大时,resize()方法会为多出来的空间添加0。而当新数组大小比原始数组的大小小时,resize()方法只会保留原始数组中前n个元素,而其他元素将会被删除。