我有两个.txt文件,其中包含图像中数千颗恒星的x和y像素坐标。这两个不同的坐标列表是不同数据处理方法的产物,导致同一对象的 x 和 y 值略有不同。
文件 1 *id_out是任意
的id_out x_out y_out m_out 0 803.6550 907.0910 -8.301 1 700.4570 246.7670 -8.333 2 802.2900 894.2130 -8.344 3 894.6710 780.0040 -8.387
文件 2
xcen ycen mag merr 31.662 37.089 22.759 0.387 355.899 37.465 19.969 0.550 103.079 37.000 20.839 0.847 113.500 38.628 20.966 0.796
.txt文件中列出的对象的组织方式不允许我在两个文件中识别相同的对象。因此,我认为对于文件 1 中的每个对象,其对象比文件 2 少,我会进行一个测试以找到文件 1 和文件 2 之间的星形匹配。对于文件 1 中的每颗星星,我想使用距离公式找到文件 2 中与 x-y 坐标最接近匹配的星星: 距离= sqrt((x1-x2(^2 + (y1-y2(^2( 在我可以更改的距离公差范围内。然后将文件中的 x1、y1、x2、y2、m_out、mag 和 merr 参数打印到主列表中。
这是我到目前为止的代码,但我不确定如何得出有效的解决方案。
#/usr/bin/python
import pandas
import numpy as np
xcen_1 = np.genfromtxt('file1.txt', dtype=float, usecols=1)
ycen_1 = np.genfromtxt('file1.txt', dtype=float, usecols=2)
mag1 = np.genfromtxt('file1.txt', dtype=float, usecols=3)
xcen_2 = np.genfromtxt('file2.txt', dtype=float, usecols=0)
ycen_2 = np.genfromtxt('file2.txt', dtype=float, usecols=1)
mag2 = np.genfromtxt('file2.txt', dtype=float, usecols=2)
merr2 = np.genfromtxt('file2.txt', dtype=float, usecols=3)
tolerance=10.0
i=0
file=open('results.txt', 'w+')
file.write("column names")
for i in len(xcen_1):
dist=np.sqrt((xcen_1[i]-xcen_2[*])^2+(ycen_1[i]-ycen_2[*]^2))
if dist < tolerance:
f.write(i, xcen_1, ycen_1, xcen_2, ycen_2, mag1, mag2, merr2)
else:
pass
i=i+1
file.close
代码不起作用,因为我不知道如何实现文件 2 中的每个星星都必须通过测试运行,如 * 索引(来自 idl,我更精通(所示。这个逻辑有没有解决方案,而不是在这种情况下的想法:
比较两个具有相同比例但坐标格网具有一些旋转和偏移的独立图像坐标列表
提前感谢!
您可以使用pandas Dataframes
.方法如下:
import pandas as pd
# files containing the x and y pixel coordinates and other information
df_file1=pd.read_csv('file1.txt',sep='s+')
df_file2=pd.read_csv('file2.txt',sep='s+')
join=[]
for i in range(len(df_file1)):
for j in range(len(df_file2)):
dis=((df_file1['x_out'][i]-df_file2['xcen'][j])**2+(df_file1['y_out'][i]-df_file2['ycen'][j])**2)**0.5
if dis<10:
join.append({'id_out': df_file1['id_out'][i], 'x_out': df_file1['x_out'][i], 'y_out':df_file1['y_out'][i],
'm_out':df_file1['m_out'][i],'xcen':df_file2['xcen'][j],'ycen':df_file2['ycen'][j],
'mag':df_file2['mag'][j],'merr':df_file2['merr'][j]})
df_join=pd.DataFrame(join)
df_join.to_csv('results.txt', sep='t')