Numpy reshape()和resize()方法的区别
通过python中的两个函数reshape和resize可以改变NumPy数组的大小。它们之间唯一的区别是,在使用resize()时原始数组保持不变,而reshape()只返回修改后的数组,原始数组保持不变。
语法
reshape()
reshape(x,y)
在这个语法中,x指定了需要从输入的较大数组中创建的较小数组的数量,y表示数组中实际存在的元素数量。
如果值是可行的,该方法将返回修改后的数组,如果无法将数组分为指定数量的较小数组,将返回错误。
Resize()
resize(x,y)
示例1
这个例子解释了使用reshape()函数来操作数组的特性。在这个例子中,一个包含8个元素的数组被重新形状,使得它被分成4个较小的数组,每个数组包含2个元素。
步骤
步骤1: 导入numpy库
步骤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库
步骤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]])
我们可以观察到,没有单独可用的调整大小的数组,而是直接操作原始数组来匹配用户在调整大小函数中作为参数提到的维度。
关键区别
属性 | 重塑 | 调整大小 |
---|---|---|
功能 | 如果数组不能被指定的子数组数量整除,则重塑属性会引发ValueError。每当数组缺少足够元素时,都会出现值错误。 | 在重塑属性的情况下,它会添加0来填充数组,使其能够完全被用户指定的片段数量整除。 |
原地切换 | 在重塑()方法的情况下,会创建现有数组的副本,并对副本的维度进行更改。因此,原始数组的维度不会发生变化。 | 调整大小()方法使用原地修改,因此原始数组将被覆盖。 |
结论
在不需要保留原始数组的情况下,可以使用reshape()或resize()方法。但是,如果传递给这些函数的参数与数组的实际大小不匹配,或者数组缺少那么多元素,则会导致错误。
如果需要保持原始数组的完整性,倾向于使用reshape而不是resize。