下面我将详细讲解Numpy中reshape()和resize()方法的区别。
reshape()方法
reshape()方法是numpy中用于改变数组形状的函数。它将一个原始数组按照指定的新形状变换,并返回一个新的数组。
这是它的基本用法:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
new_arr = np.reshape(arr, (2, 6))
print(new_arr)
输出结果:
[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]]
这里我们将原始数组arr
变成了一个形状为(2,6)
的新数组new_arr
。也就是说,新数组new_arr
是由将原始数组重新排列得到的。
需要注意的是,reshape()方法只是改变了数组的形状,并没有改变数组的大小或者数组元素的值。因此如果我们指定的新形状与原始数组的大小不一致,那么会抛出异常。
除了指定一个新的形状,还可以使用-1来表示维度自动推导,比如:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
new_arr = np.reshape(arr, (2, -1))
print(new_arr)
输出结果:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
这里我们将原始数组arr
变成了一个形状为(2,4)
的新数组new_arr
。由于new_arr
的第二个维度是-1,所以numpy自动根据数组大小计算出了第二个维度的大小。
resize() 方法
与reshape()方法不同,resize()方法是在现有数组的基础上直接修改数组的大小。如果新大小与原始大小不一致,则会在数组中插入或删除元素。当插入元素时,默认插入0。
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
np.resize(arr, (3, 4))
print(arr)
输出结果:
[1 2 3 4 5 6 7 8 9 10 11 12]
注意,resize()方法会直接在原始数组arr
上进行修改,而不是返回一个新的数组。如果原始数组的大小与新大小不匹配,它将重复数组中的某些元素或删除一些元素来满足大小要求。这可能会导致数据丢失或冗余。
下面是另一个示例:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
np.resize(arr, (4, 3))
print(arr)
输出结果:
[ 1 2 3
4 5 6
7 8 9
10 11 12]
这里我们将原始数组arr
改变为一个形状为(4,3)
的新数组,多余的元素被删除,少的元素用0补充。可以看到,由于数组元素并不是按照原始数组的顺序重复插入的,因此新旧数组之间的元素并不完全相同。
综上所述,reshape()方法只是改变了数组形状,而不改变大小或元素值,而resize()方法则是直接对数组大小进行修改。因此,在使用这两个方法时需要注意它们的区别。