我正在用大量粒子在Python中做一个分子动力学模拟。在这里,我必须跟踪所有500个或1000个粒子的x位置,y位置,z位置,x速度,y速度,z速度,x加速度,y加速度,z加速度,x力,y力,z力,势,以及系统在每个时间间隔的动能,势能,总能量。为了保存这些数据,我目前正在以以下方式将它们写入一个文件:
from numpy import*
...
f=open('myMD.dat','w')
while t<=tmax:
s='%3.3f\t\t'%(t) # writing the time to the file
f.write(s)
for i in range(TotalNumberofParticles):
UpdateParameters()
s='%8.3e %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e\t\t'%(xpos1[i],ypos1[i],zpos1[i],xvel1[i],yvel1[i],zvel1[i],xacc1[i],yacc1[i],zacc1[i],xforc[i],yforc[i],zforc[i],potn[i])
f.write(s)
...
s='%8.3e %8.3e %8.3e\n'%(KE,PE,TE)
f.write(s)
t=t+delt
f.close()
所以如果有500个粒子,那么数据文件中的每一行将有7000列。这似乎不是一种保存数据的好方法。此外,模拟还要进行几千个时间步长。随着程序的进行,它也变慢了。有人能给我一个关于如何以更好的方式保存数据的想法吗?此外,我想知道我如何检索这些数据,以供进一步分析。
不是在循环中单独编写每个XPO[i]
,而是使用numpy.savez
一次性编写整个数组;
import numpy as np
np.savez('myMD.dat',
xpos1=xpos1, ypos1=ypos1, zpos1=zpos1,
xvel1=xvel1, yvel1=yvel1, zvel1=zvel1,
xacc1=xacc1, yacc1=yacc1, zacc1=zacc1,
xforc=xforc, yforc=yforc, zforc=zforc,
potn=potn)
使用像这样的关键字参数可以确保数组以其正确的名称保存。
由于您想要为每个粒子和每个迭代写日期,我建议您在数组中添加一个额外的轴来包含所有的迭代。
xpos1 = np.array(TotalNumberofParticles)
xpos1 = np.array((number_of_iterations, TotalNumberofParticles))
import numpy as np
data = numpy.load('myMD.dat')
xpos1 = data['xpos1']
# et cetera
顺便说一句,摘自PEP8(Python风格指南):
应该避免通配符导入(
),因为它们会使名称空间中的名称不清楚,从而使读者和许多自动化工具感到困惑。
translated_page: https://github.com/PX4/Devguide/blob/master/en/simulation/airsim.md translated_sha: RETRANSLATE AirSim仿真 AirSim是一个基于虚幻引擎(Unreal Engine)的开源、跨平台无人机模拟器。它可以使用硬件在环(HITL)或软件在环(SITL)的方式为Pixh
translated_page: https://github.com/PX4/Devguide/blob/master/en/simulation/hitl.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e 硬件在环仿真 硬件在环仿真指的自驾仪与仿真器相连并且所有的代码运行在自驾仪上的仿真。这种方法的优点是可以测试代码在实际处
Gazebo是一个自主机器人3D仿真环境。它可以与ROS配套用于完整的机器人仿真,也可以单独使用。本文简要介绍单独的使用方法。 {% raw %} To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video {% endraw %} {%
translated_page: https://github.com/PX4/Devguide/blob/master/en/simulation/sitl.md translated_sha: b522243efef9deb5e2d3ae7bd03ae9ed0eee3418 Multi-Vehicle Simulation This tutorial explains how to simul
translated_page: https://github.com/PX4/Devguide/blob/master/en/simulation/sitl.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e 软件在环仿真 (SITL) 软件在环仿真是在主机上运行一个完整的系统并模拟自驾仪。它通过本地网络连接到仿真器。 设置成如
Simulators allow PX4 flight code to control a computer modeled vehicle in a simulated “world”. You can interact with this vehicle just as you might with a real vehicle, using a QGroundControl, offboar