比较两个恒星x-y坐标列表以找到匹配的物体



我有两个.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')

最新更新