| New Reply |
How to write a data file in Python |
Share Thread | Thread Tools |
| Nov18-10, 04:54 PM | #1 |
|
|
How to write a data file in Python
Hi guys
I've done a Runge-Kutta script for the Lorenz Equations in python, I need to write data for (t,x,y,z) in a .dat file in order to reprint in a table. How can a do it? Imported routines are: import sys, pylab, numpy from pylab import * from mpl_toolkits.mplot3d import Axes3D from numpy import * import matplotlib.pyplot as plt Mi iteration code is: for n in xrange(0,N): # at each time step calculate new x(t),y(t),z(t) # and append to lists x0, y0, z0 x,y,z = RKTwoD(x0[n],y0[n],z0[n],VDPXDot,VDPYDot,VDPZDot,dt) x0.append(x) y0.append(y) z0.append(z) t.append(t[n] + dt) savetxt('output.dat', (t,x0,y0,z0)) But it doesn't work, file just contain six columns instead of four and it takes too long to execute the script. Please can anyone help me? Thank you |
| Nov30-10, 01:15 AM | #2 |
|
Blog Entries: 3
|
If you keep everything as an array instead of a list, basically take
x0.append(x) y0.append(y) z0.append(z) and do a vstack or hstack at the end so table = hstack(x0,y0,z0) then you just need to write out table.tofile('output.dat') numpy lists don't write out straight to dats |
| Nov30-10, 03:19 PM | #3 |
|
|
Thanks for your answer but it doesn't work
I'm trying Code:
import sys, pylab, numpy
from pylab import *
from mpl_toolkits.mplot3d import Axes3D
from numpy import *
import matplotlib.pyplot as plt
#I'll use values of sigma = 6.0, beta = 3.0 and rho = 36
# The Lorenz Equations are dx/dt=sigma*(y-x) ; dy/dt=x*(rho-z)-y ; dz/dt=x*y-beta*z
def VDPXDot(x,y,z):
return 6.0 * (y-x)
def VDPYDot(x,y,z):
return x * (40.0 - z)- y
def VDPZDot(x,y,z):
return x * y - 3.0 * z
# 3D Fourth-Order Runge-Kutta Integrator
def RKTwoD(x,y,z,f,g,m,dt):
#9 operaciones
k1x = dt * f(x,y,z)
k1y = dt * g(x,y,z)
k1z = dt * m(x,y,z)
#15 operaciones
k2x = dt * f(x + k1x / 2.0,y + k1y / 2.0,z + k1z / 2.0)
k2y = dt * g(x + k1x / 2.0,y + k1y / 2.0,z + k1z / 2.0)
k2z = dt * m(x + k1x / 2.0,y + k1y / 2.0,z + k1z / 2.0)
#15 operaciones
k3x = dt * f(x + k2x / 2.0,y + k2y / 2.0,z + k2z / 2.0)
k3y = dt * g(x + k2x / 2.0,y + k2y / 2.0,z + k2z / 2.0)
k3z = dt * m(x + k2x / 2.0,y + k2y / 2.0,z + k2z / 2.0)
#12 operaciones
k4x = dt * f(x + k3x,y + k3y,z + k3z)
k4y = dt * g(x + k3x,y + k3y,z + k3z)
k4z = dt * m(x + k3x,y + k3y,z + k3z)
#12 operaciones
x = x + ( k1x + 2.0 * k2x + 2.0 * k3x + k4x ) / 6.0
y = y + ( k1y + 2.0 * k2y + 2.0 * k3y + k4y ) / 6.0
z = z + ( k1z + 2.0 * k2z + 2.0 * k3z + k4z ) / 6.0
return x,y,z
dt = 0.002
x0 = [0.0]
y0 = [1.0]
z0 = [0.0]
t = [0.0]
N = 20000
for n in xrange(0,N):
# at each time step calculate new x(t),y(t),z(t)
# and append to lists x0, y0, z0
x,y,z = RKTwoD(x0[n],y0[n],z0[n],VDPXDot,VDPYDot,VDPZDot,dt)
x0.append(x)
y0.append(y)
z0.append(z)
t.append(t[n] + dt)
m1 = array(x0)
m2 = array(y0)
m3 = array(z0)
m4 = array(t)
m1.tofile("putamierdax.dat", sep='\n', format = "%e")
m2.tofile("putamierday.dat", sep='\n', format = "%e")
m3.tofile("putamierdaz.dat", sep='\n', format = "%e")
|
| Nov30-10, 03:25 PM | #4 |
|
Mentor
|
How to write a data file in Python
My understanding is that Python is an interpreted language, so if you have a loop that runs for many iterations, it's going to take a long time. The way around that is to use a language that is compiled, such as C or C++.
I don't know enough about Python to say anything intelligible about your file I/O problem... |
| Nov30-10, 04:59 PM | #5 |
|
|
Thanks for your answer Mark44
No matter if the script takes too much time (I'm doing the script also for C++ and Java), but there must be some way to save all data in a unique file. By splitting it in four I have to use Ultraedit and it's a bit tiring.. |
| Nov30-10, 05:34 PM | #6 |
|
|
look into numpy.savetxt(...)
|
| Dec1-10, 08:08 PM | #7 |
|
Blog Entries: 3
|
table = hstack([x0,y0,z0,t]) but when you open it, you need to specify the size of the array and make sure it's saved and unpacked as the right type. you can also look into scipy.io.savemat Code:
m1 = array(x0)
m2 = array(y0)
m3 = array(z0)
m4 = array(t)
m1.tofile("putamierdax.dat", sep='\n', format = "%e")
m2.tofile("putamierday.dat", sep='\n', format = "%e")
m3.tofile("putamierdaz.dat", sep='\n', format = "%e")
|
| Dec8-10, 03:46 PM | #8 |
|
|
Thank you |
| Dec8-10, 04:26 PM | #9 |
|
Blog Entries: 3
|
Code:
for n in xrange(0,N):
x,y,z = RKTwoD(x0[n],y0[n],z0[n],VDPXDot,VDPYDot,VDPZDot,dt)
x0.append(x)
y0.append(y)
z0.append(z)
t.append(t[n] + dt)
m1 = array(x0)
m2 = array(y0)
m3 = array(z0)
m4 = array(t)
m1.tofile("putamierdax.dat", sep='\n', format = "%e")
m2.tofile("putamierday.dat", sep='\n', format = "%e")
m3.tofile("putamierdaz.dat", sep='\n', format = "%e")
|
| Dec9-10, 04:32 AM | #10 |
|
|
|
| New Reply |
| Thread Tools | |
Similar Threads for: How to write a data file in Python
|
||||
| Thread | Forum | Replies | ||
| Fortran 95: WRITE to screen changes output to WRITE to file | Programming & Comp Sci | 13 | ||
| Write an exponential equation from this data (data table included) | Precalculus Mathematics Homework | 2 | ||
| Write an is_prime function in Python | Engineering, Comp Sci, & Technology Homework | 1 | ||
| loading file in python shell | Programming & Comp Sci | 1 | ||
| Loading a file (module) in Python | Computing & Technology | 6 | ||