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

Python中如何批量计算数据集中两组3D坐标点的欧氏距离?

实现方案

以下是两种可直接运行的解决方法:

方法1:调用你已写好的自定义函数

通过pandas的apply方法按行传递参数即可调用你写的距离函数,逻辑直观适合新手理解:

# 你的自定义距离函数
def distance(x1, y1, z1, x2, y2, z2):
    d = math.sqrt(math.pow(x2 - x1, 2) +
                math.pow(y2 - y1, 2) +
                math.pow(z2 - z1, 2)* 1.0)
    return d 

# 新增距离列
df['distance'] = df.apply(lambda row: distance(row['x1'], row['y1'], row['z1'], row['x2'], row['y2'], row['z2']), axis=1)

注意:axis=1表示按行遍历DataFrame,每次取一整行数据传入函数

方法2:Numpy向量化计算(性能更优)

你提到的数组运算逻辑可以直接用,不需要循环,数据量较大时效率远高于逐行调用函数:

# 分别提取两组3D坐标的数组
p1 = df[['x1', 'y1', 'z1']].values
p2 = df[['x2', 'y2', 'z2']].values

# 按行计算欧氏距离,直接赋值为新列
df['distance'] = np.sqrt(np.sum((p1 - p2)**2, axis=1))
完整可运行测试代码

你可以直接运行以下代码验证效果:

import numpy as np
import pandas as pd
import math

# 生成测试数据集
data = np.random.randint(5,30,size=(10,6))
df = pd.DataFrame(data, columns=['x1', 'y1', 'z1', 'x2', 'y2', 'z2'])

# 方法1 自定义函数实现(二选一即可)
# def distance(x1, y1, z1, x2, y2, z2):
#     d = math.sqrt(math.pow(x2 - x1, 2) +
#                 math.pow(y2 - y1, 2) +
#                 math.pow(z2 - z1, 2)* 1.0)
#     return d 
# df['distance'] = df.apply(lambda row: distance(row['x1'], row['y1'], row['z1'], row['x2'], row['y2'], row['z2']), axis=1)

# 方法2 向量化实现(二选一即可)
p1 = df[['x1', 'y1', 'z1']].values
p2 = df[['x2', 'y2', 'z2']].values
df['distance'] = np.sqrt(np.sum((p1 - p2)**2, axis=1))

# 输出结果
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:06:08