python - 比较两个恒星 xy 坐标列表以找到匹配的对象
问题描述
我有两个 .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 中的每个星,我想在使用距离公式与 xy 坐标最匹配的文件 2:distance= 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')
推荐阅读
- makefile - 驱动程序未编译“没有规则来制作目标”
- reactjs - 如何通过按钮清除reactjs中的传单地图?
- tensorflow - 使用 tf.keras.preprocessing.image_dataset_from_directory() 时如何在预测期间获取文件名?
- python - 无法将该列更新为从 perforce 签出的 excel 文件
- android - 如何在约束布局中动态更改 android:layout_below?
- r - R:聚合(来自 stats v3.6.2)无法正常工作
- postgresql - 在 postgres 查询中使用函数会跳过索引。使用应用了索引的函数的任何解决方案
- typescript - TypeScript:使用单点控制创建类属性
- google-apps-script - Google 应用程序脚本:使用自定义消息共享文件
- google-chrome - Chrome 阻止下载