我是编码和尝试编写数据处理程序的新手。该程序的一部分要求我解压缩多个数据文件,每个文件有多个列,并将所有这些列存储在一个数组中。然后,'for'循环应对每个值执行基本计算。我不确定为什么它不起作用。它似乎只评估第一个数组中每个值的循环。
data_array1 = np.loadtxt("hst_gal1_cepheids.dat", dtype = "float", usecols = (1,2,3))
data_array2 = np.loadtxt("hst_gal2_cepheids.dat", dtype = "float", usecols = (1,2,3))
data_array3 = np.loadtxt("hst_gal3_cepheids.dat", dtype = "float", usecols = (1,2,3))
data_array4 = np.loadtxt("hst_gal4_cepheids.dat", dtype = "float", usecols = (1,2,3))
data_array5 = np.loadtxt("hst_gal5_cepheids.dat", dtype = "float", usecols = (1,2,3))
data_array6 = np.loadtxt("hst_gal6_cepheids.dat", dtype = "float", usecols = (1,2,3))
data_array7 = np.loadtxt("hst_gal7_cepheids.dat", dtype = "float", usecols = (1,2,3))
data_array8 = np.loadtxt("hst_gal8_cepheids.dat", dtype = "float", usecols = (1,2,3))
logP_days = np.array([data_array1[1], data_array2[1], data_array3[1], data_array4[1], data_array5[1] , data_array6[1] , data_array7[1], data_array8[1]])
m_V1 = np.array([data_array1[2], data_array2[2], data_array3[2], data_array4[2], data_array5[2] , data_array6[2] , data_array7[2], data_array8[2]])
m_I1 = np.array([data_array1[3], data_array2[3], data_array3[3], data_array4[3], data_array5[3] , data_array6[3] , data_array7[3], data_array8[3]])
data_array9 = np.loadtxt("galaxy_data.dat", dtype= "float", usecols = (1,2))
recessional_velocity = data_array9[1]
V_band_extinction = data_array9[2]
absV = []
absI = []
for i in logP_days:
abs_M_V = AlphaV*i + BetaV
absV_new = np.append(absV, abs_M_V)
for i in logP_days:
abs_M_I = AlphaI*i + BetaI
absI_new = np.append(absI, abs_M_I)
最好在列表中收集值,并在最后执行一个数组构造。试试这个:
absV = []
for i in logP_days:
abs_M_V = AlphaV*i + BetaV
absV.append(abs_M_V)
absV_new = np.array(absV)
列表追加更快,更容易正确。
通常有一些方法可以在不进行迭代的情况下构造数组。只需快速浏览一下该循环即可:
AlphaV*np.arange(logP_days) + BetaV
你在numpy.append
循环中调用的for
函数不会修改它的第一个参数(与list.append
不同)。它返回一个连接完成的新数组。
你的循环代码将输出保存为absV_new
(和第二个循环中的asbI_new
),但每次循环重复时该变量都会被覆盖。因此,您只会看到最后一行数据的结果已附加到始终为空的初始列表。
我不太清楚你期望发生什么。也许你想坚持使用常规的Python列表并使用absV.append(abs_M_V)
?或者你应该正确地找出你的AlphaX
和BetaX
变量的维度,并且只是在整个数据数组中使用numpy广播,而不是使用Python循环(例如与AlphaV * logP_days + BetaV
相关的东西)?
我想如果你改为尝试:
ogP_days = np.array([data_array1[:,0], data_array2[:,0], data_array3[:,0], data_array4[:,0], data_array5[:,0] , data_array6[:,0] , data_array7[:,0], data_array8[:,0]])
m_V1 = np.array([data_array1[:,1], data_array2[:,1], data_array3[:,1], data_array4[:,1], data_array5[:,1] , data_array6[:,1] , data_array7[:,1], data_array8[:,1]])
m_I1 = np.array([data_array1[:,1], data_array2[:,1], data_array3[:,1], data_array4[:,1], data_array5[:,1] , data_array6[:,1] , data_array7[:,1], data_array8[:,1]])
并将usecols =(1,2,3)更改为usecols =(0,1,2)您将获得更好的结果。
我正在做两件事。切片数组[:,0]为您提供每行的第一个元素。索引也从0开始。