如何将含多帧坐标的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
相关产品推荐
相关产品推荐

