我正在编写一个脚本,该脚本读入包含文件列表的一个文件,并对每个文件执行高斯拟合。这些文件中的每一个都由两列组成(下面脚本中的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()
答案 0 :(得分:0)
当您致电for wv in range(6450, 6575)
时,wv
只是该范围内的整数,而不是列表的成员。我试着看看你是如何使用该变量的。如果您想访问list wv
中的数据,则必须将语法更新为wv[wv]
(这有点令人困惑 - 最好更改for
中的变量循环到其他东西)。