Python:将时间步长从csv读取到数组:使用numpy后处理模型数据;
我仍在尝试使用python,但这个问题超出了我的知识范围: 主题:流体动力学后处理: 液压软件到阵列的csv输出,分割时间步 以下是数据以及我在工作代码方面取得的进展: 输入文件(见下文): 第一行:结果节点数 第二行:标题 第三行:timestep@time= 以下:此时间步的所有结果(在此文件中:13541个节点,变量) ..下一个时间步也一样Python:将时间步长从csv读取到数组:使用numpy后处理模型数据;,python,loops,file-io,numpy,post-processing,Python,Loops,File Io,Numpy,Post Processing,我仍在尝试使用python,但这个问题超出了我的知识范围: 主题:流体动力学后处理: 液压软件到阵列的csv输出,分割时间步 以下是数据以及我在工作代码方面取得的进展: 输入文件(见下文): 第一行:结果节点数 第二行:标题 第三行:timestep@time= 以下:此时间步的所有结果(在此文件中:13541个节点,变量) ..下一个时间步也一样 # Number of Nodes: 13541 #X Y Z
# Number of Nodes: 13541
#X Y Z depth wse
# Output at t = 0
5603.7598 4474.4902 37.470001 0 37.470001
5610.5 4461.6001 36.020001 0 36.020001
5617.25 4448.71 35.130001 0 35.130001
5623.9902 4435.8198 35.07 0 35.07
5630.7402 4422.9199 35.07 0 35.07
5761.5801 4402.79 35.369999 0 35.369999
COMMENT:....................13541 timesteps...........
# Output at t = 120.04446
5603.7598 4474.4902 37.470001 3.6977223 41.167724
5610.5 4461.6001 36.020001 4.1377293 40.15773
5617.25 4448.71 35.130001 3.9119012 39.041902
5623.9902 4435.8198 35.07 3.7923947 38.862394
5630.7402 4422.9199 35.07 3.998436 39.068436
5761.5801 4402.79 35.369999 3.9750571 39.345056
COMMENT:....................13541 timesteps...........
# Output at t = 240.06036
5603.7598 4474.4902 37.470001 11.131587 48.601588
5610.5 4461.6001 36.020001 12.564266 48.584266
5617.25 4448.71 35.130001 13.498463 48.628464
5623.9902 4435.8198 35.07 13.443041 48.513041
5630.7402 4422.9199 35.07 11.625824 46.695824
5761.5801 4402.79 35.369999 19.49551 54.865508
问题:
我需要一个循环,它以n个时间步读入数组
结果应该是:array for each timestep:在本例中为27个timestep,每个timestep包含13541个元素
timestep_1=[此timestep的所有元素:shape=13541,5]
时间步长_2=[]
时间步长_3[]
时间步长n=[]
到目前为止,我的代码是:
import numpy as np
import csv
from numpy import *
import itertools
#read file to big array
array=np.array([row for row in csv.reader(open("ascii-full.csv", "rb"), delimiter='\t')])
firstRow=array[0]
secondRow=array[1]
# find out how many nodes
strfirstRow=' '.join(map(str,firstRow))
first=strfirstRow.split()
print first[4]
nodes=first[4]
nodes=float(nodes)
#count timesteps
temp=(len(array)-3)/nodes
timesteps=int(temp)+1
#split array into timesteps:
# X Y Z h(t1) h(t2) h(tn)
ts1=array[3:nodes+3]#13541
#print ts1
ts2=array[nodes+4:nodes*2+4]
#print ts2
.......
read ts3 to last timestep to arrays with loop....
也许有人能帮我,谢谢 我对您的问题的看法是,不要将整个文件读入数组并处理数组,而是逐行读取,在读取数据时创建数组 我按照文件中的描述读取每个时间步的行数和列数,然后为每个时间步读取创建一个新数组(将其添加到列表中),然后用读取的数据填充它
import numpy as np
timesteps = []
timestep_results = []
f = open("ascii-full.csv", "rb")
# First line is number of rows (not counting the initial #)
rows = int(f.readline().strip()[1:].split()[-1])
counter = 0
# Second line is number of columns
columns = len(f.readline().strip().split())
# Next lines
for line in f:
if line.startswith("#"):
# it's a header: add time to timestep list, begin new array
timesteps.append( float(line.strip().split("=")[1]) )
timestep_results.append( np.zeros((rows, columns)) )
counter = 0
else:
# it's data: add to array in appropiate row
timestep_results[-1][counter] = map(float, line.strip().split())
counter += 1
f.close()
希望有帮助 您可以使用
np.genfromtxt()
获得一个三维数组,如:
import numpy as np
gen = (a for a in open('test.txt') if not a[0] in ['#', 'C'])
a = np.genfromtxt(gen).reshape(-1, 6, 5)
其中,
a[i]
将代表timestepi
的输出,不客气!如果它解决了您的问题,请选择我的答案作为接受答案。