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

如何将含多帧坐标的Pandas DataFrame转换为指定结构的NumPy数组?

解决方案

步骤1:准备数据

先将表格数据转换为NumPy数组,可手动构造或从文件读取:

import numpy as np

# 模拟表格数据:第一列为帧号,后续依次是x1,y1,z1,x2,y2,z2...xn,yn,zn
data = np.array([
    [1, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9],
    [2, 0.2, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
])

步骤2:处理单帧数据

针对单个帧提取坐标,重塑为目标格式:

# 跳过帧号列,提取当前帧的所有坐标值
frame_coords = data[0, 1:]

# 重塑为(n, 3)数组,每个元素对应一个点的[x,y,z]
P = frame_coords.reshape(-1, 3)
# 输出示例:array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]])

# 从P中提取前两列,得到每个点的[x,y]
V = P[:, :2]
# 输出示例:array([[0.1, 0.2], [0.4, 0.5], [0.7, 0.8]])

步骤3:批量处理所有帧

一次性处理所有帧,得到包含所有帧结果的数组:

# 提取所有帧的坐标数据(跳过帧号列)
all_coords = data[:, 1:]

# 重塑为(帧数, 点数, 3)的三维数组,每个子数组对应一帧的P
all_P = all_coords.reshape(data.shape[0], -1, 3)

# 提取每个点的前两列,得到所有帧的V
all_V = all_P[:, :, :2]

关键说明

  • reshape(-1, 3)中的-1让NumPy自动计算点的数量,要求每一行的坐标列数必须是3的倍数(每个点对应x/y/z三列),否则会抛出维度不匹配错误。
  • 如果数据来自Excel/CSV文件,可先用pandas.read_excel或pandas.read_csv加载数据,再通过df.to_numpy()转换为NumPy数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:15:36