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


NumPy 数组的大小可以通过 Python 中的两个函数(reshape 和 resize)来改变。它们之间只有一个区别,即使用 resize() 时原始数组保持不变,而 reshape() 仅返回更改后的数组,原始数组保持不变。

语法

Reshape()

reshape(x,y)

在此语法中,x 指定要从提供的较大的输入数组中创建的较小数组的数量,y 表示数组中存在的元素的实际数量。

如果值是实际的,则该方法返回一个修改后的数组,如果数组无法细分为指定数量的较小数组,则返回错误。

Resize()

resize(x,y)

在确定 x 和 y 参数时,该函数与 reshape() 函数非常相似。返回模式也保持相同。

此外,原始数组会永久更改。

示例 1

这解释了 reshape() 属性用于操作数组特征的使用。在此示例中,一个包含 8 个元素的数组被重新整形,使其被划分为 4 个较小的数组,每个数组包含 2 个元素。

算法

步骤 1:导入 numpy 为 np

步骤 2:从给定数组创建 NumPy 数组。

步骤 3:通过传递每个较小数组中的元素数量和此类较小数组的数量来使用 reshape 函数。

步骤 4:打印数组。

示例

#import numpy
import numpy as np
 
#create a numpy array with values of the array.
data = np.array([10, 20, 30, 40, 50, 60, 70, 80])

#print the contents of the original numpy array
print("Original array: ")
display(data)

#reshape the array into a 4x2 matrix and display it.
print("Reshaped array: ")
display(data.reshape(4, 2))

#print the original array 
print("Original array:")
display(data)

输出

Original array: 
array([10, 20, 30, 40, 50, 60, 70, 80])

Reshaped array: 
array([[10, 20],
    [30, 40],
    [50, 60], 
    [70, 80]])

从输出中,我们可以看到即使在使用 reshape() 之后,原始数组也保持不变。更改是在缓冲区数组中进行的,该数组具有所需的维度。

示例 2

此代码解释了 resize() 属性用于操作数组特征的使用。这里,一个包含 8 个元素的数组被调整大小,使其被划分为 4 个数组,每个数组包含 2 个元素。请注意,更改是在原始数组本身中进行的。

算法

步骤 1:导入 numpy 为 np

步骤 2:从给定数组创建 NumPy 数组。

步骤 3:通过传递每个较小数组中的元素数量和此类较小数组的数量来使用 resize 函数。

步骤 4:打印数组。

示例

#import numpy
import numpy as np

#create a numpy array with values of the array
data = np.array([10, 20, 30, 40, 50, 60, 70, 80])

#print the contents of the original array
print("Original array: ")
display(data)

#resize the array into a 4x2 matrix
print("Resized array: ")
display(data.resize(4, 2))
 
#print the original array
print("Original array:")
display(data)

输出

Original array: 
array([10, 20, 30, 40, 50, 60, 70, 80])

Resized array: 
None

Original array:
array([[10, 20],
    [30, 40],
    [50, 60],
    [70, 80]])

我们可以观察到,没有单独提供的调整大小的数组,并且原始数组本身被操作以匹配用户在 resize 函数中作为参数提到的维度。

主要区别

属性 Reshape Resize
功能 如果数组不能被细分为指定的子数组数量,则 reshape 属性会抛出 ValueError。每当数组缺少足够的元素时,都会观察到 ValueError。 对于 reshape 属性,它会添加 0 来填充数组,使其正好可以被用户提到的片段数量整除。
就地切换 对于 reshape(),会创建现有数组的副本,并将维度更改应用于数组的副本。因此,原始数组的维度没有变化 resize() 方法使用就地修改,因此原始数组会被覆盖。

结论

在不需要保留原始数组的情况下,可以使用 reshape() 或 resize() 这两种方法。但是,如果传递给函数的参数与数组的实际大小不匹配,或者数组缺少那么多元素,则会引发错误。

如果必须保持原始数组不变,则首选 Reshape 而不是 Resize。

更新于: 2023年8月10日

412 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告