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

如何高效计算MxN坐标集合与固定点的Euclidean distance?

高效计算多组三维坐标与固定点的欧氏距离

直接用numpy的向量化运算替代循环是最优解——numpy底层基于C实现,批量运算的速度远超过Python循环,哪怕是100x40的规模也能瞬间完成。

核心实现思路

利用numpy的广播机制,让固定点与所有坐标点批量做减法,再通过平方和开根号(欧氏距离公式)或np.linalg.norm一步完成距离计算。

针对示例的具体代码

方法1:手动实现距离公式

import numpy as np

c = np.array([[[1,2,3],[4,5,6]],[[1,1,1],[2,2,2]],[[6,5,4],[2,3,1]]])
s = np.array([[0],[0],[1]])

# 调整固定点形状,使其能和c广播匹配(c为(3,2,3),s转成(1,1,3))
s_reshaped = s.reshape(1, 1, 3)
# 批量计算:相减→平方→按最后一维求和→开根号
distances = np.sqrt(np.sum((c - s_reshaped) ** 2, axis=-1))

print(distances)
# 输出:
# [[3.         7.07106781]
#  [1.73205081 2.44948974]
#  [8.71779789 2.23606798]]

方法2:用np.linalg.norm简化代码

np.linalg.norm默认计算欧氏距离,指定axis=-1即可对每个三维坐标点单独计算范数:

import numpy as np

c = np.array([[[1,2,3],[4,5,6]],[[1,1,1],[2,2,2]],[[6,5,4],[2,3,1]]])
s = np.array([[0],[0],[1]])

s_reshaped = s.reshape(1, 1, 3)
distances = np.linalg.norm(c - s_reshaped, axis=-1)

print(distances)
# 输出与方法1完全一致

效率优势说明

  • 避开了Python层面的循环开销,所有运算都在numpy的底层C代码中执行
  • 广播机制自动完成“固定点与每组坐标配对”的逻辑,无需手动编写嵌套循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:20:57