python读取特定列范围

时间:2016-09-26 13:56:55

标签: python

我正在编写一个脚本,该脚本读入包含文件列表的一个文件,并对每个文件执行高斯拟合。这些文件中的每一个都由两列组成(下面脚本中的wv和flux)。我的小问题是如何根据“wv”值限制范围?我尝试使用“for”循环,但是我得到了与拟合相关的错误(如果我不限制“wv”范围,我就不会得到)。

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt


fits = []
wvi_b = []
wvi_r = []

p = open("file_input.txt","r")
for line in p:
    fits.append(str(line.split()[0]))
    wvi_b.append(float(line.split()[1]))
    wvi_r.append(float(line.split()[2]))
p.close()

for j in range(len(fits)):
    wv = []
    flux = []
    f = open("%s"%(fits[j]),"r")
    for line in f:
        wv.append(float(line.split()[0]))
        flux.append(float(line.split()[1]))
    f.close()

    def gauss(x,a,b,c,a1,b1,c1,d):
        func = a*np.exp(-((x-b)**2)/(2.0*(c)**2)) + a1*np.exp(-((x-b1)**2)/(2.0*(c1)**2))+d
        return func

    for wv in range(6450, 6575):
        guess=(0.8,wvi_b[j],3.0,1.0,wvi_r[j],3.0,1.0)
        popt,pconv=curve_fit(gauss,wv,flux,guess)
        print popt[1], popt[4]
        ymod=gauss(wv,*popt)
        plt.plot(wv,ymod)
        plt.plot(wv,flux,marker='.')
        plt.show()

1 个答案:

答案 0 :(得分:0)

当您致电for wv in range(6450, 6575)时,wv只是该范围内的整数,而不是列表的成员。我试着看看你是如何使用该变量的。如果您想访问list wv中的数据,则必须将语法更新为wv[wv](这有点令人困惑 - 最好更改for中的变量循环到其他东西)。