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

基于无人机数据逐帧计算行人车辆距离的Python/Matlab代码实现方法

Python实现逐帧行人和车辆距离计算方案

核心思路

利用pandas的表关联功能自动完成同帧下所有行人和车辆的配对,再通过向量化运算批量计算距离,比手动写for循环效率高10倍以上,完全适配你的数据量。

前置准备

假设你已经将行人数据、车辆数据读取为pandas DataFrame,分别命名为peds_df、vehs_df,先对重复的列名重命名避免冲突:

import pandas as pd
import numpy as np

# 重命名列,避免合并后冲突
peds_df = peds_df.rename(columns={
    'id': 'ped_id',
    'x_est': 'ped_x',
    'y_est': 'ped_y',
    'v_abs': 'ped_speed'
})

vehs_df = vehs_df.rename(columns={
    'id': 'veh_id',
    'x_est': 'veh_x',
    'y_est': 'veh_y',
    'vel_est': 'veh_speed'
})

核心实现代码

# 按帧号关联,同帧下所有行人和车辆会自动配对
merged_df = pd.merge(peds_df, vehs_df, on='frame', how='inner')

# 批量计算距离
merged_df['distance'] = np.sqrt(
    (merged_df['ped_x'] - merged_df['veh_x'])**2 + 
    (merged_df['ped_y'] - merged_df['veh_y'])**2
)

# 提取你需要的三列,也可保留frame、ped_id、veh_id等字段按需筛选
result_df = merged_df[['distance', 'ped_speed', 'veh_speed']]

# 可选:导出结果为csv
result_df.to_csv('ped_veh_distance.csv', index=False)

原代码问题说明

你原来的写法是直接对两个不同长度的DataFrame做相等判断和运算,维度不匹配必然报错。上述方案不需要手动写for循环遍历每帧,pandas的关联操作已经自动完成了同帧配对,向量化运算也比嵌套for循环效率高很多,即使你全量116帧的数据也可以在毫秒级完成计算。

可选:逐帧for循环实现(不推荐,效率低)

如果一定要按你计划的用for循环逐帧处理,参考代码如下:

result = []
# 遍历所有唯一帧号
for frame in peds_df['frame'].unique():
    # 取当前帧的行人和车辆
    frame_peds = peds_df[peds_df['frame'] == frame]
    frame_vehs = vehs_df[vehs_df['frame'] == frame]
    # 遍历当前帧所有行人和车辆配对
    for _, ped in frame_peds.iterrows():
        for _, veh in frame_vehs.iterrows():
            dist = np.sqrt((ped['ped_x'] - veh['veh_x'])**2 + (ped['ped_y'] - veh['veh_y'])**2)
            result.append([dist, ped['ped_speed'], veh['veh_speed']])

result_df = pd.DataFrame(result, columns=['distance', 'ped_speed', 'veh_speed'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:45:05