У меня есть два файла .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, который наиболее точно соответствует координатам xy по формуле расстояния: 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 должна проходить тест, как указано * index (который идет от idl, в который я более разбираюсь). Есть ли решение для этой логики c, в отличие от мышления в этом случае:
Сравнение двух независимых списков координат изображения с одинаковым масштабом, но координатной сеткой, имеющей некоторое вращение и смещение
Заранее спасибо!