You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python数组重塑:为何flatten()比ravel()函数速度慢?

为什么NumPy中flatten()比ravel()速度慢?

先看测试代码:

import numpy as np
x = np.arange(1000000)
x.shape = 100, 100, 100
%timeit x.flatten() 
%timeit x.ravel()

二者的速度差异核心在于是否创建数据副本:

  • ravel()返回的是原数组的视图(View):它只是重新定义了数组的维度描述信息,并没有复制原数组的任何数据,相当于给原数组的数据套了个新的「维度外壳」,所以操作几乎不消耗额外时间和内存。
  • flatten()返回的是原数组的副本(Copy):它会把原数组的所有数据完整复制到一块新的内存空间中,生成一个完全独立的新数组。当数组规模很大时(比如测试里的百万级元素),数据复制的开销会非常显著,这就是它速度远慢于ravel()的根本原因。

可以用简单代码验证这个差异:

import numpy as np
x = np.arange(6).reshape(2,3)
x_ravel = x.ravel()
x_flatten = x.flatten()

# 修改原数组的元素
x[0,0] = 99

print(x_ravel[0])  # 输出99,说明ravel的结果和原数组共享数据
print(x_flatten[0]) # 输出0,说明flatten的结果是独立的副本

适用场景总结

  • 若只是临时调整数组形状,且不需要修改返回的数组(或希望修改同步到原数组),优先用ravel(),既快又省内存。
  • 若需要对返回的数组做独立修改,不想影响原数组,就用flatten(),虽然慢但能保证数据独立性。

内容的提问来源于stack exchange,提问作者Matin Rasooli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:31:02