两条曲线之间的距离

时间:2014-02-20 17:13:36

标签: python gnuplot

我想计算两条曲线之间距离的累积和。

例如,我有两个包含数据的文件,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吗?

谢谢!

1 个答案:

答案 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