Ich mache eine Molekulardynamik-Simulation in Python mit einer großen Anzahl von Partikeln. Hier muss ich x-Position, y-Position, z-Position, x-Geschwindigkeit, y-Geschwindigkeit, z-Geschwindigkeit, x-Beschleunigung, y-Beschleunigung, z-Beschleunigung, x-Kraft, y-Kraft verfolgen , Z-Kraft, Potenzial für alle 500 oder 1000 Teilchen zusammen mit der kinetischen Energie, potentielle Energie, Gesamtenergie des Systems in jedem Zeitintervall. Um diese Daten zu speichern ich derzeit in eine Datei in der folgenden Art und Weise schreibe:Speichern von Simulationsdaten in Python
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()
Also, wenn es 500 Teilchen, jede Zeile in der Datendatei wird 7000 Spalten haben. Es scheint irgendwie eine schlechte Art, Daten zu speichern. Außerdem läuft die Simulation für mehrere tausend Zeitschritte. Wenn das Programm fortschreitet, wird es auch langsamer. Kann mir jemand eine Idee geben, wie ich meine Daten besser speichern kann? Ich würde auch gerne wissen, wie ich diese Daten für weitere Analysen abrufen kann.
Ich habe nur eine Abfrage mit 'np.savez ('myMD.dat', xpos1 = xpos1, ypos1 = ypos1, ..., zforc = zforc, potn = potn)'. Kann ich diese Zeile innerhalb einer Schleife schreiben, da Daten für xpos1, ypos1 usw. für alle Partikel aufgezeichnet werden sollen. Und wenn ja, kann ich jeweils den gleichen Keyword-Namen angeben? – kanayamalakar
@kanayamalakar Ich nehme an, Sie meinen, Sie möchten Daten für alle Partikel und alle Zeitschritte aufzeichnen? Ich habe meine Antwort geändert, um das zu reflektieren. –