我想计算两条曲线之间距离的累积和。
例如,我有两个包含数据的文件,file1.txt:
#
# IS_MassLossRate generated file
#
# wall_color: inlet1
#
# mp_mean: mass loss rate (kg/m^2/s)
# mass_loss: mass loss (kg)
# total_mass: total mass of fuel (kg)
#
# time mp_mean mass_loss total_mass
0.00000E+00 0.00000E+00 0.00000E+00 1.50272E+00
1.00000E+00 5.20347E-12 4.97380E-14 1.50272E+00
2.00000E+00 6.28181E-12 1.06803E-13 1.50272E+00
3.00000E+00 8.69515E-12 1.81632E-13 1.50272E+00
4.00000E+00 1.35947E-11 2.92655E-13 1.50272E+00
5.00000E+00 2.28162E-11 4.74731E-13 1.50272E+00
6.00000E+00 3.91465E-11 7.85150E-13 1.50272E+00
7.00000E+00 6.66501E-11 1.31650E-12 1.50272E+00
8.00000E+00 1.11061E-10 2.21045E-12 1.50272E+00
9.00000E+00 1.80245E-10 3.67706E-12 1.50272E+00
1.00000E+01 2.84732E-10 6.01985E-12 1.50272E+00
1.10000E+01 4.38328E-10 9.66449E-12 1.50272E+00
1.20000E+01 6.58799E-10 1.51967E-11 1.50272E+00
1.30000E+01 9.68644E-10 2.34042E-11 1.50272E+00
1.40000E+01 1.39594E-09 3.53306E-11 1.50272E+00
1.50000E+01 1.97525E-09 5.23350E-11 1.50272E+00
1.60000E+01 2.74866E-09 7.61615E-11 1.50272E+00
1.70000E+01 3.76683E-09 1.09023E-10 1.50272E+00
1.80000E+01 5.09017E-09 1.53691E-10 1.50272E+00
1.90000E+01 6.79006E-09 2.13599E-10 1.50272E+00
2.00000E+01 8.95014E-09 2.92962E-10 1.50272E+00
和file2.txt,它与file1.txt的结构不同,但包含相同类型的数据:
#temps masse Moy masse MLR
11 1502.59 1502.6236363636 0.0063636364
12 1502.56 1502.6163636364 0.0072727273
13 1502.59 1502.6090909091 0.0072727273
14 1502.6 1502.6018181818 0.0072727273
15 1502.61 1502.5990909091 0.0027272727
16 1502.61 1502.6009090909 0.0018181818
17 1502.58 1502.6054545455 0.0045454545
18 1502.59 1502.6109090909 0.0054545455
19 1502.61 1502.6109090909 0
20 1502.63 1502.6072727273 0.0036363636
21 1502.64 1502.6054545455 0.0018181818
22 1502.64 1502.6081818182 0.0027272727
23 1502.62 1502.6118181818 0.0036363636
24 1502.59 1502.6145454546 0.0027272727
25 1502.56 1502.6181818182 0.0036363636
26 1502.59 1502.6181818182 0
27 1502.64 1502.6127272727 0.0054545455
28 1502.62 1502.6045454546 0.0081818182
29 1502.62 1502.6009090909 0.0036363636
30 1502.65 1502.6009090909 0
我想计算file2.txt中第2列与file2.txt中第4列之间差异的绝对值之和。
我知道gnuplot可以做这些事情,但我想把计算出的值(让我们称之为Diff)传递给python脚本来做一些工作......
我该怎么办?我可以在python脚本中执行此操作并直接在那里获得Diff吗?
谢谢!
答案 0 :(得分:0)
class Data:
def __init__(self, data_file):
self.f = data_file
self.read()
self.data()
def read(self):
lines = open(self.f).readlines()
lines = [_.strip() for _ in lines]
self.lines = lines
def data(self, comment='#', sep=None):
data = []
for line in self.lines:
if not line.startswith(comment):
line = line.split(sep)
data.append(line)
self.data = data
def select_data(self, tstart, tstop, tcol, dcol):
d0 = []
for m in self.data:
if float(m[tcol]) >= tstart and float(m[tcol]) <= tstop:
d0.append(m[dcol])
return d0
d1 = Data('f1.txt')
d2 = Data('f2.txt')
d1s = d1.select_data(11, 20, 0, 1) # 1 for col 2
d2s = d2.select_data(11, 20, 0, 3) # 3 for col 4
if len(d1s) <= len(d2s):
n0 = len(d1s)
else:
n0 = len(d2s)
diff = []
for i in xrange(n0):
diff.append(abs(float(d1s[i]) - float(d2s[i])) )
sum = 0
for m in diff:
sum += m
print sum