numpy 中的 flatten() 和 ravel() 函数都可以将多维数组转换为一维数组,但它们之间存在一些区别:
- 返回类型:
flatten():返回的是数组的一个副本,即一个新的数组对象。ravel():返回的是数组的视图(view),这意味着它不会占用额外的内存,并且对返回的数组的修改可能会影响到原始数组。
- 内存使用:
flatten():由于返回的是副本,所以会占用额外的内存。ravel():返回的是视图,因此不会占用额外的内存。
- 连续性:
flatten():默认情况下,返回的数组总是连续的,即数据在内存中是连续存储的。ravel():默认情况下,如果原始数组是连续的,那么返回的视图也是连续的;如果原始数组不是连续的,那么返回的视图可能不是连续的。
- 参数:
flatten():有一个可选参数order,可以设置为'C'(按行)、'F'(按列)或者'A'(原顺序)等,来指定返回的数组的顺序。ravel():同样接受order参数,并且还可以接受order='K',它表示保持原始数组的元素顺序。
- 性能:
flatten():由于创建了一个副本,所以可能会比ravel()慢。ravel():通常比flatten()快,因为它返回的是视图。
以下是一个简单的示例来说明这两个函数的使用:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 使用 flatten()
flattened_arr = arr.flatten()
print(flattened_arr) # 输出: [1 2 3 4 5 6]
# 使用 ravel()
raveled_arr = arr.ravel()
print(raveled_arr) # 输出: [1 2 3 4 5 6]
# 修改 raveled_arr 中的一个元素,原始数组也会被修改
raveled_arr[0] = 99
print(arr) # 输出: [[99 2 3]
# [ 4 5 6]]
在这个例子中,修改 raveled_arr 会影响原始数组 arr,但修改 flattened_arr 不会。
1756

被折叠的 条评论
为什么被折叠?



