📅  最后修改于: 2023-12-03 15:00:46.932000             🧑  作者: Mango
在 Numpy 中,有两个函数用于将多维数组转换为一维数组:flatten()
和 ravel()
。这两个函数之间有一些重要的差异,我们需要了解这些差异以便在编写代码时正确使用它们。
flatten()
函数返回一个将多维数组展开为一维数组的副本。它将多维数组的所有元素复制到一维数组中,并将其返回。它不会影响原始数组。
以下是使用 Flatten()
函数的示例代码:
import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
out_arr = arr.flatten()
print("Original array shape:", arr.shape)
print("Flattened array shape:", out_arr.shape)
输出结果如下:
Original array shape: (2, 3)
Flattened array shape: (6,)
从输出结果可以看出,原始数组是一个 2x3 的矩阵,而展开后的数组是一个具有 6 个元素的一维数组。
ravel()
函数也返回将多维数组展开为一维数组的副本。但与 flatten()
不同的是,它返回的是原始数组的视图,而不是复制。
以下是使用 ravel()
函数的示例代码:
import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
out_arr = arr.ravel()
print("Original array shape:", arr.shape)
print("Flattened array shape:", out_arr.shape)
输出结果如下:
Original array shape: (2, 3)
Flattened array shape: (6,)
可以将 ravel()
函数的输出结果与 flatten()
函数的输出结果进行比较,它们是相同的。但请注意,使用 ravel()
函数时,如果修改了返回的一维数组中的元素,则原始数组也会发生相应的更改。
以下是一个示例代码,它演示了修改 ravel()
函数返回的一维数组中的元素时原始数组是如何修改的:
import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
out_arr = arr.ravel()
print("Original array:")
print(arr)
out_arr[0] = 100
print("Modified array:")
print(arr)
输出结果如下:
Original array:
[[1 2 3]
[4 5 6]]
Modified array:
[[100 2 3]
[ 4 5 6]]
可以看出,将 out_arr[0]
的值设置为 100 后,原始数组中的相应元素也发生了更改。
需要注意的是,如果使用 ravel()
函数返回的一维数组修改了原始数组中的元素,那么这些更改也会反映在使用原始数组时返回的数组中。这可能会导致意外的行为,因此在使用 ravel()
函数时应谨慎操作。
两个函数中,ravel()
函数更适合对大型数组进行操作,因为它返回的是原始数组的视图,而不是复制。如果不打算修改数组元素,则可使用 flatten()
函数,因为它始终返回一份复制。无论你使用哪个函数,都需要了解它们各自的差异,以便根据实际情况选择最佳函数。