读取列表

时间:2016-09-27 13:07:49

标签: python

我的脚本有一个小问题。我正在读取两列文件中的值,并对这些值执行拟合和其他计算。我的问题是我试图仅在一列的一系列(我的脚本中的“wv”)中预先形成这些拟合和计算。我已将我的脚本附加到我正在使用“for”循环执行此操作(“for wv in range(6450,6635):”)。期望的结果是执行拟合,但仅在wv值范围从6450到6635(而不是wv的所有值)。问题是我得到的错误与x和y有相同的第一维,你能看出我做错了吗?

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

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

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

MJD_eph = 43366.275
SP_orb = 1667.0
P_orb = 26.4960
lam = 6562.801
c = 3.0e5

g = open("test_write.txt", "w")
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()
    print "%s   %0.2f   %0.2f"%(fits[j],wvi_b[j],wvi_r[j])

    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, 6635):
        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)
        wb = popt[1]
        wr = popt[4]
        V = popt[0] + 1
        R = popt[3] + 1
        print popt[0]+1, popt[1], popt[3]+1, popt[4]
        e1 = (MJD[j] - MJD_eph)/P_orb
        phase = e1 - int(e1)
        dV = wr-wb
        dVel = (dV/lam)*c
        dVb = wb-lam
        Vblue = (dVb/lam)*c
        dVr = wr-lam
        Vred = (dVr/lam)*c

        ymod = gauss(wv,*popt)
        plt.xlim((6450, 6635))
        plt.ylim((0.5, 2.5))
        plt.plot(wv, ymod)
        plt.plot(wv, flux, marker='.')
        plt.show()
        g.write("%s     %0.6f       %0.3f   %0.3f     %0.3f     %0.3f   %0.3f   %0.3f   %0.3f\n" %(fits[j], MJD[j], phase, Vblue, Vred, V, R, wb, wr))
g.close()

0 个答案:

没有答案