поэтому я недавно написал базовый код для анализа расстояния между двумя точками, которые хранятся в двух отдельных файлах 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), чтобы определить, имеют ли объекты какую-либо близость друг к другу?
Мое исследование оказалось довольно бесплодным, чтобы анализировать пункты именно таким образом, поскольку я в основном просто не понимаю страницы справки. Это мой первый проект по кодированию, поэтому, пожалуйста, будьте осторожны с вашими советами, рекомендациями, помощью, отзывами или ЧЕМ-НИБУДЬ еще, что вы могли бы предложить. Заранее спасибо.
Из документации
>>> 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.
Джастин Т
Джеймс К.
Джастин Т
Джеймс К.
зефир
numpy.genfromtxt
чтения.Джастин Т