Python中的flatten()函数与reshape()函数的比较与区别
在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()函数返回的是原始数组的一个视图,而不是复制品。
