通过将范围内的数字添加到末尾来创建多个变量

Creating multiple varibles by adding numbers in a range to the end

这是我第一次post在这个论坛上希望大家一切顺利。我对 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(之前定义了变量 slope 和 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 变量,这将对应于正确的星系,但是它在 return 之后出现无效语法错误。 我也尝试使用 .append

M_.append(str[i])=slope*logp.append(i)+incept`

但这也给了我一个"cant assign to function call"的错误 如果这看起来是非常新手的代码,我很抱歉,但我对编码和尝试掌握它非常陌生。 任何形式的帮助将不胜感激。 非常喜欢。

我可以推荐使用字典结构,像这样:

M_parameters = {}

for i in range(1,8):
        M_parameters[f"M_{i}"]=slope*logp[i]+incpt

然后你可以像这样从字典中获取参数:

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.