这是我在该论坛上的第一篇帖子,希望大家一切顺利。我是python的新手,目前正在使用它进行天文学项目的数据分析。我已经使用numpy加载了8个.dat文件,每个文件包含每个星系的多个周期值。
logp1,m_1 =np.loadtxt('hst_gal1_cepheids.dat',\
unpack=True, \
usecols=(1,2), \
dtype=float)
logp2,m_2 =np.loadtxt('hst_gal2_cepheids.dat',\
unpack=True, \
usecols=(1,2), \
dtype=float)`
`
等等...
我必须使用方程M_(n)= slope * logp(n)+ incept(变量斜率和incept之前已定义)。我最初是这样做的
M_2=slope*logp2+incpt
M_3=slope*logp3+incpt
但是,这似乎很漫长而混乱。我尝试使用
`for i in range(1,8):
def func(slope,incept,logpi:
return M_[i]=slope*logp[i]+incpt`
创建从1到8的多个M变量,它们对应于正确的星系,但是返回后语法无效。我也尝试使用.append
M_.append(str[i])=slope*logp.append(i)+incept`
但这也给了我一个“无法分配给函数调用”的错误,如果这看起来是非常新手的代码,我感到很抱歉,但是我对编码和试图摆脱它很陌生。任何形式的帮助将不胜感激。非常喜欢。
我可以建议使用字典结构,如下所示:
M_parameters = {}
for i in range(1,8):
M_parameters[f"M_{i}"]=slope*logp[i]+incpt
然后,您可以像这样从dict中获取参数:
M_parameters[M_1]
要么
M_parameters.get(M_1, None) # Get if exists, if not return None
如果每个M的斜率和截距都不同,则可以形成它们的列表:
weights = [(slope_1, int_1), ..., (slope_8, int_8)]
然后从一个循环中提取它们:
for i in range(1,8):
slope, incpt = weights[i-1]
M_parameters[f"M_{i}"]=slope*logp[i]+incpt
或者,如果您不需要它们作为变量,并且列表就足够了,则可以执行以下操作:
M = [slope*logp[i]+incpt for i in range(1,8)]
然后称它们为:
M[0], M[1] e.t.c.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句