如何加速Python中两个超400万点数据数组的插值计算?
性能优化方案
核心性能瓶颈分析
你的代码耗时极高主要来自两个错误实现:
- 逐元素Python原生循环,没有利用numpy的向量化运算能力,百万级数据下Python循环的开销会被无限放大
- 动态调用
np.append拼接结果数组,每次操作都需要重新申请全量内存并拷贝已有数据,数据量越大耗时增长越快
优化实现
你要做的是两个固定时间点的全局线性插值,完全不需要循环调用np.interp,直接通过向量运算计算即可:
# 数据导入、裁剪无关列步骤保持不变 JT_2015 = np.delete(data_2015,[0,1],1) JT_2024 = np.delete(data_2024,[0,1],1) # 提取位置列步骤保持不变 nodeSets = np.delete(data_2024,[2],1) # 拉平为1D数组步骤保持不变 JT_2015 = np.ravel(JT_2015) JT_2024 = np.ravel(JT_2024) # 直接向量化计算线性插值,全程无循环 # 插值权重计算:2019距离2015间隔4年,2015到2024总间隔9年 alpha = (2019 - 2015) / (2024 - 2015) JT_2019 = JT_2015 * (1 - alpha) + JT_2024 * alpha
性能提升效果
400万长度的数组做上述运算,普通消费级CPU下耗时不会超过10毫秒,相比原方案提速超过百万倍。
如果你的数据中存在缺失值(NaN),可以直接用np.where做向量化判断过滤,不需要额外引入循环。
内容的提问来源于stack exchange,提问作者Aiden Razey
相关产品推荐
相关产品推荐

