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

如何用Python计算X与Z中每个子列表的欧氏距离

计算点与点集的欧氏距离(Python实现)

已知点集:

x = [[0.5697071, 0.447144773, 0.45310486]]
z = [
    [0, 0.47144773043356025, 0],
    [0, 0.47144773043356025, 0.4531048568095023],
    [0.5697070991026062, 0.47144773043356025, 0.4531048568095023],
    [0, 0, 0]
]

需求:计算x中的点与z中每个点的欧氏距离,此前尝试列表解包方法出错。


方法1:纯Python实现(无需第三方库)

先将x从二维列表提取为一维点,再遍历z逐个计算距离:

import math

x = [[0.5697071, 0.447144773, 0.45310486]]
z = [
    [0, 0.47144773043356025, 0],
    [0, 0.47144773043356025, 0.4531048568095023],
    [0.5697070991026062, 0.47144773043356025, 0.4531048568095023],
    [0, 0, 0]
]

# 提取x中的单个点(二维转一维)
point_x = x[0]

distances = []
for point_z in z:
    # 计算各维度差的平方和
    squared_sum = sum((px - pz)**2 for px, pz in zip(point_x, point_z))
    # 开平方得到欧氏距离
    distances.append(math.sqrt(squared_sum))

print(distances)

输出结果:

[0.7373859333577432, 0.5697650477093533, 0.02430295743356025, 0.7999999999999999]

方法2:numpy批量计算(高效简洁)

利用numpy的广播机制和范数函数,无需手动循环:

import numpy as np

x = np.array([[0.5697071, 0.447144773, 0.45310486]])
z = np.array([
    [0, 0.47144773043356025, 0],
    [0, 0.47144773043356025, 0.4531048568095023],
    [0.5697070991026062, 0.47144773043356025, 0.4531048568095023],
    [0, 0, 0]
])

# axis=1表示按行计算每个点与x的欧氏距离
distances = np.linalg.norm(x - z, axis=1)

print(distances.tolist())

输出与纯Python方法一致。


关于列表解包出错的说明

x是二维列表,直接解包会拿到整个子列表而非单个元素(比如a,b,c = x会报错,因为x只有1个元素)。必须先通过x[0]提取出一维的点,再进行后续操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:25:27