Использование SkyChord для чтения в нескольких координатах.

поэтому я недавно написал базовый код для анализа расстояния между двумя точками, которые хранятся в двух отдельных файлах Excel. Теперь, когда у меня есть этот код, пришло время применить законное использование и использовать этот код для анализа не только двух измерений (x, y), но и трех (ra, dec, z). В таблицах данных теперь я сохранил координаты двух отдельных галактик. Вот измененный код ниже:

import math
import pandas
file1 = pandas.read_excel('Book1.xlsx')
file2 = pandas.read_excel('Book2.xlsx')
file1['RA_diff'] = file2['RA'] - file1['RA']
file1['DEC_diff'] = file2['DEC'] - file1['DEC']
file1['Z_diff'] = file2['Z'] - file1['Z']
dist = file1.apply(lambda row: math.hypot(row['RA_diff'], row['DEC_diff', row['Z_diff']]),   axis=1)
if dist.values >= .5:
    print 'no match'
elif dist.values <= .5:
    print True, dist

Этот код отлично работает только с RA и DEC, но не очень хорошо с добавленным Z.

Я надеюсь, что кто-нибудь, пожалуйста, дайте мне несколько советов о том, как сократить весь этот процесс, используя метод:

from astropy.coordinates import SkyCoord

В основном: как я могу использовать этот инструмент в своих интересах при чтении (из двух отдельных документов Excel) двух отдельных координат (ra, dec, z), чтобы определить, имеют ли объекты какую-либо близость друг к другу?

Мое исследование оказалось довольно бесплодным, чтобы анализировать пункты именно таким образом, поскольку я в основном просто не понимаю страницы справки. Это мой первый проект по кодированию, поэтому, пожалуйста, будьте осторожны с вашими советами, рекомендациями, помощью, отзывами или ЧЕМ-НИБУДЬ еще, что вы могли бы предложить. Заранее спасибо.

Ответы (1)

Из документации

>>> c1 = SkyCoord(ra=10*u.degree, dec=9*u.degree, distance=10*u.pc, frame='icrs')
>>> c2 = SkyCoord(ra=11*u.degree, dec=10*u.degree, distance=11.5*u.pc, frame='icrs')
>>> c1.separation_3d(c2)  
<Distance 1.5228602415117989 pc>

Остальной код просто читает файлы Excel и распечатывает результаты. То, что у вас есть сейчас, неверно, даже без координаты «z». Вы не можете вычислить расстояние между двумя точками в сферических координатах по теореме Пифагора: например, (30*, 0*) и (30*, 359*) должны быть очень близки. Сначала вам нужно преобразовать в декартовы координаты, что и делает модуль astropy.

Хорошо, спасибо, так что то, что вы указали выше, в основном является необходимым преобразованием из декартовых координат в сферические? Также вы все еще рекомендуете использовать pandas для чтения в файле excel или есть лучший способ в астропии?
Пример кода вычисляет расстояние между двумя точками, заданными в сферических полярных координатах. Точки равны (10*, 9*, 10 парсек) и (11*, 10*, 11,5 парсек). Я не знаю точного формата ваших файлов Excel, но приведенного выше должно быть достаточно, чтобы вы начали. Astropy не может читать файлы Excel, поэтому, если pandas работает для вас, используйте его.
Итак, при быстром поиске я обнаружил, что pandas не обрабатывает многомерные таблицы, поэтому теперь я немного обескуражен тем, что весь мой код отключен. Но я буду продолжать отключаться, есть ли лучший вариант, чем панды, для чтения и сравнения данных из нескольких таблиц в астропии, которые я могу использовать, чтобы эта первая часть работала?
Я не знаю, на что похожи ваши таблицы и почему у вас две рабочие тетради. Можете ли вы поместить все свои данные в один файл csv? В любом случае, это будет вопрос о переполнении стека, если вы не можете заставить его работать самостоятельно.
@JustinT Как говорит Джеймс, ваш вопрос о чтении файлов должен быть связан с переполнением стека, но я скажу, что вам следует рассмотреть разные форматы для вашего файла. Поместите свои данные в текстовый файл (просто скопируйте и вставьте из Excel в текстовый файл) и используйте что-то вроде numpy.genfromtxtчтения.
@zephyr Спасибо за совет! Кроме того, Джеймс К. Я буду продолжать изучать астропию, спасибо за указание в правильном направлении!