2014-02-20 5 views
1

Я хочу вычислить суммарную сумму расстояния между двумя кривыми.Расстояние между двумя кривыми

Например, у меня есть два файла, содержащие данные, 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 

Я хочу рассчитать сумму абсолютного значения разницы между столбцом 2 в файле1.txt и столбце 4 в файле2.txt относительно времени.

Я знаю, что Gnuplot может делать такие вещи, но я хочу, чтобы передать значение, вычисленное (назовем его Diff) на питон скрипт, чтобы сделать некоторую работу с ...

Как я могу сделать? Могу ли я сделать это внутри скрипта python и получить Diff прямо там?

Спасибо!

+0

Вы можете более или менее четко объяснить свое определение аренды? : d = abs (f1_c2 - file2_c4) –

+0

@rabinutam d = Сумма абс (f1_c2 (t) - f2_c4 (t)) от t = 11 до t = 20, например (Диапазоны времени (столбец 1 в двух файлы) не то же самое!) – user3116130

+0

вам нужно сначала извлечь данные из этих файлов. 'numpy.loadtxt' было бы хорошо. – ysakamoto

ответ

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 
+0

Это базовое решение Вы можете добавить чеки, исключения, функции для diff, sum и т. Д. –

+0

Большое спасибо! Это работает ! – user3116130

Смежные вопросы