欢迎访问宙启技术站
智能推送

Python中的flatten()函数与reshape()函数的比较与区别

发布时间:2024-01-09 10:12:14

在Python中,flatten()函数和reshape()函数都被用于数组的重构。它们之间有一些相似之处,但也有一些区别。

首先,我们来看flatten()函数。该函数用于将多维数组转换为一维数组。它会按照数组的行顺序对所有元素进行迭代,并生成一个扁平化的一维数组。

例如,我们有一个二维数组a:

a = [[1, 2, 3],
     [4, 5, 6]]

使用flatten()函数,我们可以将其转换为一维数组b:

b = a.flatten()

结果b为:[1, 2, 3, 4, 5, 6]

接下来,我们来看reshape()函数。该函数用于改变数组的形状。它接受一个元组作为参数,表示新数组的形状。

例如,我们有一个一维数组c:

c = [1, 2, 3, 4, 5, 6]

我们可以使用reshape()函数将其转换为二维数组d:

d = c.reshape((2, 3))

结果d为:

[[1, 2, 3],
 [4, 5, 6]]

可以看到,reshape()函数改变了数组的形状,但保持了数组的元素不变。

总结一下,flatten()函数用于将多维数组转换为一维数组,而reshape()函数用于改变数组的形状。flatten()函数会按照行顺序将数组的所有元素迭代到一维数组中,而reshape()函数根据给定的元组参数改变数组的形状,元素的顺序不变。

需要注意的是,flatten()函数返回的是原始数组的复制品,而reshape()函数返回的是原始数组的一个视图。这意味着修改flatten()函数返回的数组不会影响到原始数组,而修改reshape()函数返回的数组会影响到原始数组。

下面是一个具体的例子来演示flatten()函数和reshape()函数的使用:

import numpy as np

a = np.array([[1, 2, 3],
              [4, 5, 6]])

b = a.flatten()
print(b)  # 输出: [1 2 3 4 5 6]

c = np.array([1, 2, 3, 4, 5, 6])
d = c.reshape((2, 3))
print(d)  # 输出: [[1 2 3]
          #        [4 5 6]]

d[0][0] = 10
print(c)  # 输出: [10  2  3  4  5  6]

在上面的例子中,我们使用flatten()函数将二维数组a转换为一维数组b,并使用reshape()函数将一维数组c转换为二维数组d。然后我们修改了d的 个元素为10,并发现c的对应元素也被修改了。这说明reshape()函数返回的是原始数组的一个视图,而不是复制品。