将numpy数组保存为txt文件[初学者]

时间:2014-11-24 01:09:49

标签: python numpy text multidimensional-array save

我有兴趣将二维矩阵保存为一组三个数组到一个txt文件中。 具体来说,我希望能够将(u[0,:], u[1,:], u[2,:])作为array1.txt (u[1,:], u[2,:], u[3,:])保存为array1.txt,将(u[2,:], u[3,:], u[4,:])保存为array2.txt,依此类推。

但是,我遇到了2个问题的问题。

  1. 我不确切知道如何创建此保存循环
  2. 当我将三行保存到txt文件中时,我的数组的元素不会保存到三行行中,但它们会聚在一起。
  3. 这是我的代码,谢谢你:

    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的输出:

    `enter image description here

1 个答案:

答案 0 :(得分:1)

您应该可以按如下方式访问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