[英]Saving numpy arrays as txt file [Beginner]
我有兴趣将二维矩阵保存到一个由三个数组组成的组中,并将其保存到txt文件中。 具体来说,我希望能够将(u[0,:], u[1,:], u[2,:])
为array0.txt (u[1,:], u[2,:], u[3,:])
为array1.txt, (u[2,:], u[3,:], u[4,:])
为array2.txt,依此类推。
但是,我有2个问题。
这是我的代码,谢谢:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
dx=0.06 #space incrementB
dt=0.03 #time increment # Make sure time increment
# is smaller than space increment
tmin=0.0 # initial time
tmax=50.0 # simulate until
xmin=-100.0 # left bound
xmax=100.0 # right bound...assume packet
# never reaches boundary
c = 1.0 # speed of sound
rsq=(c*dt/dx)**2 #appears in finite diff sol for damped and linear damped
k = 10
w = 1/(1+ k*dt) #appears in finite diff sol for linear damped
amplitude = 10
nx = int((xmax-xmin)/dx) + 1 #number of points on x grid
nt = int((tmax-tmin)/dt) + 2 #number of points on t grid
u = np.zeros((nt,nx)) #solution to WE
def init_fn(x):
val = amplitude*(np.exp(-(x**2)/25))
# If you decrease the amplitude by 10, the total PE
# decreases by 100 #Big potential amp = 1, 2 mag small amp=1/10
if val<.0001:
return 0.0
else:
return val
for a in range(0,nx):
u[0,a]=init_fn(xmin+a*dx)
u[1,a]=u[0,a]
#simulate dynamics
for t in range(1,nt-1):
for a in range(1,nx-1):
u[t+1,a] = 2*(1-rsq)*w*u[t,a]+ u[t-1,a]*w*(k*dt-1) +rsq*(u[t,a-1]+u[t,a+1])*w
np.savetxt('array0.txt', (u[0,:],u[1,:],u[2,:0]),
delimiter=' ', fmt='%.2e' ) # X is an array
f1 = open('array0.txt', 'r')
print f1
for line in f1.readlines():
print line,
这是我对array0.txt的输出:
`
您应该能够访问u
的3个连续行的所有组,如下所示:
for row1, row2, row3 in zip(u[0::,:],u[1::,:],u[2::,:]):
print(row1, row2, row3)
print("\n")
# or write them to one file, or files.
快速测试:
u = np.array([[1,2,3,4,5], [5,6,7,8,9], [10,11,12,13,14], [13,23,33,43,53], [54,64,74,84,94], [105,115,125,135,145]] )
for row1, row2, row3 in zip(u[0::,:],u[1::,:],u[2::,:]):
print(row1, row2, row3)
print("\n")
得到:
[1 2 3 4 5] [5 6 7 8 9] [10 11 12 13 14]
[5 6 7 8 9] [10 11 12 13 14] [13 23 33 43 53]
[10 11 12 13 14] [13 23 33 43 53] [54 64 74 84 94]
[13 23 33 43 53] [54 64 74 84 94] [105 115 125 135 145]
要将每个循环的行保存在单独的文件中,可以使用:
idx = 0;
for row1, row2, row3 in zip(u[0::,:],u[1::,:],u[2::,:]):
print(row1, row2, row3)
np.savetxt('array{:03d}.txt'.format(idx),
(row1, row2, row3),
delimiter=' ', fmt='%.2e')
idx = idx + 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.