Python:如何修复routin

2024-09-30 18:14:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一段代码,将过滤器应用于数据集。滤波器有两个关键的数据位,波长和吞吐量。数据文件还有两个关键的数据位,波长和流量。不幸的是,滤波器文件和数据文件中的波长并不总是匹配的。下面的代码旨在使用y=mx+c在数据点之间进行插值,从而在不等于滤波器文件中波长的波长处获得通过滤波器的通量的近似值

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

如果我改变它,使jrange(filterwavelength)上,那么程序会连续运行,但我认为它会在每个I的所有j上循环,这需要永远。有更好的写作方法吗


Tags: textinlenrangeb1file2波长append
2条回答

是的,这就是为什么你会有例外 j使用了错误的最大长度。你肯定需要改变:

for j in range(len(wavelength)):

for j in range(len(filterwavelength)):

人们不知道你说的“我不想循环”是什么意思

您在wavelength上有j范围,但随后将其用作filteredwavelength(最初为空)的索引。还可以修改循环中的ij,这通常(但并不总是)可疑

相关问题 更多 >