该测试程序是将protocol变量转换为DataFrame类型为了便于使用numpy等数学工具
ImuEncode_pb2 是使用protocol生成的model, 具体使用方法可参考Protocol buffer 指南。

这是我使用的一些变量的声明

import time
import ImuEncode_pb2
import numpy as np
import pandas as pd
from pandas.core.frame import DataFrame
from ImuSignal import LegString
from ImuSignal import LegPositionString
from ImuSignal import SignalAttributeDict
from OnlineClassifier import OnlineClassifierImuSignalDataset = ImuEncode_pb2.ImuSignalDataset()
for i in range(50):imusignal =ImuSignalDataset.imusignal.add()for j in range(4):signal = imusignal.signal.add()signal.TimeStamp = 0signal.acc.AccX = 0signal.acc.AccY = 0signal.acc.AccZ = 0signal.angle.Roll = 0signal.angle.Pitch = 0signal.anglerate.Course = 0signal.quaternion.v = 0signal.quaternion.x = 0signal.quaternion.y = 0signal.quaternion.z = 0signal.leg = ImuEncode_pb2.Signal.RTsignal.legposition = ImuEncode_pb2.Signal.Footrate = 100 #sample rate
period = 0.5 #classify period
Leg = ['RT','LT']
Leg_Position = ['Foot','Thigh']
angle = ['Roll','Pitch','Course']
accel = ['AccX','AccY','AccZ']

特别注意下面代码段的加入,这是对于内存的声明,我是随便赋值不知道Python变量的声明原理后续完善

SignalFrame = DataFrame()
for leg in Leg:for leg_position in  Leg_Position:for signal in  accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg]  = np.arange(999999999,999999999+int(period*rate),1)/1000000

该方法不简单并且耗时应该是最长的,测试耗时为: 0.09793972969055176

SignalFrame = DataFrame()
for leg in Leg:for leg_position in  Leg_Position:for signal in  accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg]  = np.arange(999999999,999999999+int(period*rate),1)/1000000starttime = time.time()
SignalFrame = pd.concat([pd.DataFrame(data={"Foot_AccX_RT":imusignal.signal[0].acc.AccX,  "Foot_AccY_RT":imusignal.signal[0].acc.AccY,        "Foot_AccZ_RT":imusignal.signal[0].acc.AccZ,\"Foot_Roll_RT":imusignal.signal[0].angle.Roll,  "Foot_Pitch_RT":imusignal.signal[0].angle.Pitch,    "Foot_Course_RT":imusignal.signal[0].anglerate.Course,\"Thigh_AccX_RT":imusignal.signal[1].acc.AccX,   "Thigh_AccY_RT":imusignal.signal[1].acc.AccY,       "Thigh_AccZ_RT":imusignal.signal[1].acc.AccZ,\"Thigh_Roll_RT":imusignal.signal[1].angle.Roll, "Thigh_Pitch_RT":imusignal.signal[1].angle.Pitch,   "Thigh_Course_RT":imusignal.signal[1].anglerate.Course,\"Foot_AccX_LT":imusignal.signal[2].acc.AccX,    "Foot_AccY_LT":imusignal.signal[2].acc.AccY,        "Foot_AccZ_LT":imusignal.signal[2].acc.AccZ,\"Foot_Roll_LT":imusignal.signal[2].angle.Roll,  "Foot_Pitch_LT":imusignal.signal[2].angle.Pitch,    "Foot_Course_LT":imusignal.signal[2].anglerate.Course,\"Thigh_AccX_LT":imusignal.signal[3].acc.AccX,   "Thigh_AccY_LT":imusignal.signal[3].acc.AccY,       "Thigh_AccZ_LT":imusignal.signal[3].acc.AccZ,\"Thigh_Roll_LT":imusignal.signal[3].angle.Roll, "Thigh_Pitch_LT":imusignal.signal[3].angle.Pitch,   "Thigh_Course_LT":imusignal.signal[3].anglerate.Course,\},index=[0]) for imusignal in ImuSignalDataset.imusignal],ignore_index=True)
endtime = time.time()
print("cost time:",endtime-starttime)

该方法不简单并且耗时长,测试耗时为: 0.04797029495239258

SignalFrame = DataFrame()for leg in Leg:for leg_position in  Leg_Position:for signal in  accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg]  = np.arange(999999999,999999999+int(period*rate),1)/1000000starttime = time.time()
for imusignal in ImuSignalDataset.imusignal:SignalFrame = SignalFrame.append({"Foot_AccX_RT":imusignal.signal[0].acc.AccX,  "Foot_AccY_RT":imusignal.signal[0].acc.AccY,        "Foot_AccZ_RT":imusignal.signal[0].acc.AccZ,\"Foot_Roll_RT":imusignal.signal[0].angle.Roll,  "Foot_Pitch_RT":imusignal.signal[0].angle.Pitch,    "Foot_Course_RT":imusignal.signal[0].anglerate.Course,\"Thigh_AccX_RT":imusignal.signal[1].acc.AccX,   "Thigh_AccY_RT":imusignal.signal[1].acc.AccY,       "Thigh_AccZ_RT":imusignal.signal[1].acc.AccZ,\"Thigh_Roll_RT":imusignal.signal[1].angle.Roll, "Thigh_Pitch_RT":imusignal.signal[1].angle.Pitch,   "Thigh_Course_RT":imusignal.signal[1].anglerate.Course,\"Foot_AccX_LT":imusignal.signal[2].acc.AccX,    "Foot_AccY_LT":imusignal.signal[2].acc.AccY,        "Foot_AccZ_LT":imusignal.signal[2].acc.AccZ,\"Foot_Roll_LT":imusignal.signal[2].angle.Roll,  "Foot_Pitch_LT":imusignal.signal[2].angle.Pitch,    "Foot_Course_LT":imusignal.signal[2].anglerate.Course,\"Thigh_AccX_LT":imusignal.signal[3].acc.AccX,   "Thigh_AccY_LT":imusignal.signal[3].acc.AccY,       "Thigh_AccZ_LT":imusignal.signal[3].acc.AccZ,\"Thigh_Roll_LT":imusignal.signal[3].angle.Roll, "Thigh_Pitch_LT":imusignal.signal[3].angle.Pitch,   "Thigh_Course_LT":imusignal.signal[3].anglerate.Course,\},ignore_index=True)
endtime = time.time()
print("cost time:",endtime-starttime)

该方法简单并且耗时仅长于最快的实现方法,测试耗时为:0.016989469528198242

SignalFrame = DataFrame()for leg in Leg:for leg_position in  Leg_Position:for signal in  accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg]  = np.arange(999999999,999999999+int(period*rate),1)/1000000
starttime = time.time()
i=0
for imusignal in ImuSignalDataset.imusignal:for SignalData in imusignal.signal:signal_dict = SignalAttributeDict(SignalData)for signal in angle + accel:SignalFrame.at[i,LegPositionString(SignalData.legposition)+"_"+signal+"_"+LegString(SignalData.leg)]=signal_dict[signal]i+=1
endtime = time.time()
print("cost time:",endtime-starttime)

该方法不简单,如果数据量较大可能会影响数据的准确度,但是耗时应该是最短的,测试耗时为:0.012990951538085938

SignalFrame = DataFrame()for leg in Leg:for leg_position in  Leg_Position:for signal in  accel + angle:SignalFrame[leg_position+"_"+signal+"_"+leg]  = np.arange(999999999,999999999+int(period*rate),1)/1000000starttime = time.time()
i=0
for imusignal in ImuSignalDataset.imusignal:SignalFrame.loc[i]=[imusignal.signal[0].acc.AccX   , imusignal.signal[0].acc.AccY    , imusignal.signal[0].acc.AccZ,\imusignal.signal[0].angle.Roll  , imusignal.signal[0].angle.Pitch , imusignal.signal[0].anglerate.Course,\imusignal.signal[1].acc.AccX    , imusignal.signal[1].acc.AccY    , imusignal.signal[1].acc.AccZ,\imusignal.signal[1].angle.Roll  , imusignal.signal[1].angle.Pitch , imusignal.signal[1].anglerate.Course,\imusignal.signal[2].acc.AccX    , imusignal.signal[2].acc.AccY    , imusignal.signal[2].acc.AccZ,\imusignal.signal[2].angle.Roll  , imusignal.signal[2].angle.Pitch , imusignal.signal[2].anglerate.Course,\imusignal.signal[3].acc.AccX    , imusignal.signal[3].acc.AccY    , imusignal.signal[3].acc.AccZ,\imusignal.signal[3].angle.Roll  , imusignal.signal[3].angle.Pitch , imusignal.signal[3].anglerate.Course]i+=1
endtime = time.time()
print("cost time:",endtime-starttime)

用于生成ImuEncode_pb2的ImuEncode.proto文件如下

syntax = "proto2";
package ImuTutorial;message Signal {enum Leg {RT = 0;LT = 1;}enum LegPosition{Foot = 0;Thigh = 1;}required Leg leg = 1 [default = RT];required LegPosition legposition = 2 [default = Foot];optional float TimeStamp = 3;optional int64 time = 4;optional int32 id = 5;message Acc{required float AccX = 1;required float AccY = 2;required float AccZ = 3;}message Angle{optional float Course = 1;required float Roll = 2;required float Pitch = 3;}message AngleRate{required float Course = 1;optional float Roll = 2;optional float Pitch = 3;}message Quaternion{optional float v = 1;required float x = 2;required float y = 3;required float z = 4;}required Acc acc = 6;required Angle angle= 7;required AngleRate anglerate= 8;optional Quaternion quaternion = 9;
}message ImuSignal {required uint64 time = 1;repeated Signal signal = 2;
}message ImuSignalDataset {repeated ImuSignal imusignal = 1;
}message Datalength {required fixed32 length = 1;
}

Pandas DataFrame四种写入方法效率对比相关推荐

  1. python最快的循环方法_【转】【Python效率】五种Pandas循环方法效率对比

    [Python效率]五种Pandas循环方法效率对比 - 文兄的文章 - 知乎 https://zhuanlan.zhihu.com/p/80880493 正文: 如果你使用过Python及Panda ...

  2. 循环下标_【转】【Python效率】五种Pandas循环方法效率对比

    [Python效率]五种Pandas循环方法效率对比 - 文兄的文章 - 知乎 https://zhuanlan.zhihu.com/p/80880493 正文: 如果你使用过Python及Panda ...

  3. mybatis批量更新数据三种方法效率对比

    探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数  &allowMultiQuer ...

  4. python 财务分析可视化方法_Python数据可视化的四种简易方法

    Python数据可视化的四种简易方法 作者:PHPYuan 时间:2018-11-28 03:40:43 摘要: 本文讲述了热图.二维密度图.蜘蛛图.树形图这四种Python数据可视化方法. 数据可视 ...

  5. python下载文件到本地-Python下载网络文本数据到本地内存的四种实现方法示例

    本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法.分享给大家供大家参考,具体如下: import urllib.request import requests from io imp ...

  6. 大数据可视化python_大数据分析之Python数据可视化的四种简易方法

    本篇文章探讨了大数据分析之Python数据可视化的四种简易方法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 数据可视化是任何数据科学或机器学习项目的一个重要组成部分 ...

  7. EF、Chloe、SqlSugar、DOS.ORM四种ORM框架的对比

    文章目录 四种orm框架的对比 1.什么是ORM? 2.四种框架的基本信息对比如下表: 3.四种框架的耗时情况如下: 4.四种框架都支持哪些功能? 5.就个人使用而言,比较推荐哪个框架? 6.SqlS ...

  8. 计算机无法连接无线信号,win7系统连接无线信号时提示Windows无法连接到路由器名称的四种解决方法...

    现如今网络发展速度非常快,无线网络已经普及了,使用率高了遇到的问题也就多了.比如有时候笔记本win7系统连接无线信号时出现"Windows无法连接到路由器名称"(如下图所示),该如 ...

  9. 电脑快捷方式删除文件后四种找回方法

    快捷指令是一种用作替代快捷键操作的技术.也可以称为"快捷键","快捷方式"或"快捷键序列",它们允许用户在非常快速和方便的方式建立特定操作序 ...

最新文章

  1. 开发日记-20190822 关键词 读书笔记《Unix环境高级编程(第二版)》《掌控习惯》DAY 2
  2. python快速入门答案-总算懂得python脚本快速入门教程
  3. 有向图的深度和广度遍历
  4. Linux 查看网卡流量【转】
  5. linux was8.5 配db2数据源配置,DataStage v8.5对于db2 v8数据库的支持问题
  6. C 库函数 - pow()
  7. Linux桌面虚拟化技术KVM
  8. Ubuntu安装完驱动后进不去界面
  9. Abaqus简单部件受力分析
  10. HC-05嵌入式蓝牙串口通讯
  11. python饼状图显示其比例_Python学习笔记(matplotlib篇)--使用matplotlib绘制饼状图
  12. Android仿网易云项目代码,Android项目实战教程之高仿网易云音乐启动页实例代码...
  13. Matlab中的ttest2()函数实现
  14. java作为微信小程序的后端_微信小程序连接java后端
  15. js两只手指控制div图片放大缩小功能(2)
  16. equals和hashcode方法
  17. SQL Server数据库实操 第四波 视图、索引
  18. 小程序生成海报并下载
  19. Ubuntu18.04 安装 omnet 5.6.2
  20. Java开发规范整理

热门文章

  1. ibmx340服务器硬盘,IBM3850安装操作系统
  2. [限免]可爱怪兽来了~ 培养孩子辨识数字的「Cutie Mini Monsters」! ...
  3. 手机通讯录 Python
  4. python中如何打开文件选择框
  5. 如何修改wordpress的访问端口
  6. tick_params()--matplotlib
  7. 网易免费企业邮支持POP3/SMTP服务器
  8. Hfish蜜罐的使用
  9. 第11章 运算符重载与约定
  10. GLES2.0中文API-glBlendFuncSeparate