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。