我正在尝试编写一段代码来将过滤器应用于数据集。该滤波器有两个关键位数据,波长和吞吐量。数据文件还有两个关键的数据位,波长和通量。不幸的是,过滤器文件和数据文件中的波长并不总是匹配。下面的代码旨在使用y=mx+c
在数据点之间进行插值,因此获得通过滤波器的通量的近似值,其波长不等于滤波器文件中的波长。Python:如何修复插值例程
def openfilterfile(filterfile):
throughput=[]
filterwavelength=[]
text_file2 = open(filterfile, "r")
lines2 = text_file2.read()
#print lines2
text_file2.close()
b = [float(y) for y in lines2.split()]
b1=0
b2=1
while b1<len(b):
filterwavelength.append(b[b1])
throughput.append(b[b2])
b1+=2
b2+=2
print len(filterwavelength), len(throughput)
f=scipy.interpolate.interp1d(filterwavelength, throughput, kind='linear')
xnew = filterwavelength
ynew = f(xnew)
pylab.plot(filterwavelength, throughput, xnew, ynew)
pylab.xlim(0, 25000)
pylab.show()
return filterwavelength, throughput
def accountforfilter(wavelength, flux, filterwavelength, throughput):
filteredwavelength=[]
filteredflux=[]
for i in range(len(wavelength)):
for j in range(len(wavelength)):
if wavelength[i]==filterwavelength[j]:
j=filterwavelength.index(wavelength[i])
filteredwavelength.append(wavelength[i])
filteredflux.append(flux[i]*throughput[j])
elif wavelength[i]<filterwavelength[j]<wavelength[i+1]:
filteredwavelength.append(wavelength[i])
filteredflux.append(flux[i]*f(wavelength[i]))
elif wavelength[i]<filterwavelength[j]:
i+=1
elif wavelength[i]>filterwavelength[j+1]:
j+=1
return filteredwavelength, filteredflux
当我运行它,我得到错误信息:
Traceback (most recent call last):
File "C:\Python27\05.12.2014.py", line 103, in <module>
filteredwavelength, filteredflux = accountforfilter(wavelength, flux, filterwavelength, throughput)
File "C:\Python27\05.12.2014.py", line 87, in accountforfilter
if wavelength[i]==filterwavelength[j]:
IndexError: list index out of range
如果我改变它,这样j
是在range(filterwavelength)
,然后程序继续运行,但我认为这是遍历每个我的所有j,永远都是。有没有更好的写作方式?