通过将范围内的数字添加到末尾来创建多个变量
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.
这是我第一次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.