简体   繁体   中英

Saving numpy arrays as txt file [Beginner]

I am interested in saving a two dimensional matrix into a group of three arrays into a txt file. Specifically, I want to be able to save (u[0,:], u[1,:], u[2,:]) as array0.txt (u[1,:], u[2,:], u[3,:]) as array1.txt and (u[2,:], u[3,:], u[4,:]) as array2.txt and so on.

However, I am having problem with 2 issues.

  1. I do not know exactly how to go about creating this saving loop
  2. When I save three rows into a txt file, the elements of my arrays are not saved into three row lines, but they are bunched up together.

Here is my code, and thank you:

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,

Here is my output of array0.txt:

` 在此处输入图片说明

You should be able to access all groups of 3 consecutive rows of your u as follows:

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.

Quick test:

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")

Gives:

[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]

To save the rows in separate files for each loop, you can use:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM