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

  • Post category:Python

下面我将详细讲解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()方法则是直接对数组大小进行修改。因此,在使用这两个方法时需要注意它们的区别。