цикл for для суммирования цикла перезаписывает значения данных Python - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть вопрос, касающийся моего кода для оценки данных эксперимента: в первом цикле for я открываю файл за файлом, который хочу проанализировать.внутри этого цикла for, поэтому внутри одного файла я хочу создать второй цикл for для оценки некоторых конкретных параметров для оценки.когда я делаю это только для одного файла, параметры верны, но когда я зацикливаюсь на всех файлах, похоже, что во втором цикле for эти параметры суммируются.таким образом, нормальное значение должно быть в диапазоне ar = 0,0001, для одного файла отлично работает.когда я перебираю файлы, я получаю 0,0001 для первого, 0,0002 для второго, 0,0003 для трида и т. д.

update:
ок, так что вот и всечасть кода.для каждого файла, который я хочу после подгонки данных, получить сумму по разнице между двумя точками данных в первом столбце (x [j]) внутри файла, умноженными на значение coressponding во втором столбце n (y [j]) (каждый файлимеет два столбца длиной 720 точек данных), и результат этого должен быть сохранен в AR для каждого файла.

def sum_list(l):
  sum = 0
  for k in l:
     sum += k
  return sum

INV= []
DIFFS= []
AR= []

for i in range(0,len(fnames)):

data= np.loadtxt(fnames[i])
x= data[:,0]
y=data[:,1]




gmod=lm.Model(linmod)
result= gmod.fit(y, x=x, p=0.003, bg=0.001)
plt.plot(x, y)
plt.plot(x, result.best_fit, 'r-')
plt.show()             

print result.best_values['bg']

print result.best_values['p']
p= result.best_values['p']
bg1= result.best_values['bg']                    


for j in range(0, 719):
    diffs = ((x[j+1]- x[j])*y[j])
    DIFFS.append(diffs)

ar= sum_list(DIFFS)
AR.append(ar)


inr= (x[0]-bg1)*(y[0]**3)/3 + ar
INV[i]= inr

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы работаете с файлами (например, открываете их), я предлагаю использовать модуль os, возможно, такая конструкция поможет вам избежать вложенного цикла for:

for root,dirs,files in os.walk(os.getcwd()):
    for i in files:
      with open(os.path.join(root,i)) as f:
              #do your summation 
...