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

如何加速Python中点的最近线性距离匹配及Color映射代码?

代码加速优化方案

问题分析

原代码采用双重嵌套循环,时间复杂度为O(N*M),其中N=572,M=1e6,总计算量超5亿次,再加上循环内的print IO操作,导致运行速度极慢。另外,手动计算距离时的平方根操作属于冗余计算——比较距离大小只需平方距离即可,无需开根号。

优化方案

使用KDTree最近邻搜索(基于scipy库),将时间复杂度降至O(M logM + N logM),同时移除冗余计算和低效IO操作。

步骤1:导入依赖库

import numpy as np
from scipy.spatial import KDTree

步骤2:构建KDTree并执行最近邻搜索

# 确保输入为numpy数组(原代码中已满足索引操作,可省略此步)
X = np.asarray(X)
Velocity_Momentum = np.asarray(Velocity_Momentum)
Color = np.asarray(Color)

# 构建KDTree,用于高效最近邻查询
tree = KDTree(Velocity_Momentum)

# 查询X中每个点的最近邻索引(k=1表示只取最近的1个点)
_, nearest_indices = tree.query(X, k=1)

# 直接通过索引获取对应Color值
Outputs = Color[nearest_indices]

步骤3:批量输出结果(替代循环内print)

循环内的print会频繁触发IO操作拖慢速度,建议改为批量输出:

for x2, y2, color in zip(X[:, 0], X[:, 1], Outputs):
    print(f"X2 = {x2}  Y2 = {y2}  Color = {color}")

优化效果说明

  • 时间复杂度大幅降低:KDTree构建时间为O(M logM),单条查询时间为O(logM),总计算量从5.72e8次降至约2000万次,速度提升数十倍以上。
  • 移除冗余计算:KDTree内部采用优化的距离比较逻辑,无需手动计算平方根。
  • 减少IO开销:批量输出避免了循环内频繁IO的性能损耗。

内容的提问来源于stack exchange,提问作者Jaffer Wilson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:05:19