Как объединить два астропийных вектора SkyCoord? - PullRequest
0 голосов
/ 23 апреля 2019

Я загрузил данные координат из двух разных звездных каталогов (в реальной жизни, Tycho2 и Hipparcos), и я пытаюсь создать одну таблицу звездных позиций. Один дает позиции и правильное движение в эпоху J2000.0, другой в эпоху J1991.25. Из документации по астропии я должен быть в состоянии преобразовать одно в другое и затем объединить их в один вектор позиций. Если я запускаю следующее MWE, я получаю сообщение об ошибке, в котором говорится, что два входа не имеют эквивалентных кадров.

from astropy.coordinates import SkyCoord, concatenate
from astropy.time import Time
import astropy.units as u

tpos = SkyCoord(
    ra=[1, 2, 3, 4] * u.deg,
    dec=[1, 2, 3, 4] * u.deg,
    pm_ra_cosdec=[1e-3, 2e-3, 3e-3, 4e-3] * u.milliarcsecond / u.year,
    pm_dec=[1e-3, 2e-3, 3e-3, 4e-3] * u.milliarcsecond / u.year,
    obstime=Time(2000.0, format='jyear'),
    frame='icrs'
)

spos = SkyCoord(
    ra=[1, 2, 3, 4] * u.deg,
    dec=[1, 2, 3, 4] * u.deg,
    pm_ra_cosdec=[1e-3, 2e-3, 3e-3, 4e-3] * u.milliarcsecond / u.year,
    pm_dec=[1e-3, 2e-3, 3e-3, 4e-3] * u.milliarcsecond / u.year,
    obstime=Time(1991.25, format='jyear'),
    frame='icrs'
).transform_to(tpos)

pos = concatenate([tpos, spos])

Я получаю ошибку:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-3eecaa4d104b> in <module>
     21 ).transform_to(tpos)
     22 
---> 23 pos = concatenate([tpos, spos])

~\AppData\Local\Continuum\anaconda3\lib\site-packages\astropy\coordinates\funcs.py in concatenate(coords)
    373         if not sc.is_equivalent_frame(scs[0]):
    374             raise ValueError("All inputs must have equivalent frames: "
--> 375                              "{0} != {1}".format(sc, scs[0]))
    376 
    377     # TODO: this can be changed to SkyCoord.from_representation() for a speed

ValueError: All inputs must have equivalent frames: <SkyCoord (ICRS): (ra, dec) in deg
    [(1., 1.), (2., 2.), (3., 3.), (4., 4.)]
 (pm_ra_cosdec, pm_dec) in mas / yr
    [(0.001, 0.001), (0.002, 0.002), (0.003, 0.003), (0.004, 0.004)]> != <SkyCoord (ICRS): (ra, dec) in deg
    [(1., 1.), (2., 2.), (3., 3.), (4., 4.)]
 (pm_ra_cosdec, pm_dec) in mas / yr
    [(0.001, 0.001), (0.002, 0.002), (0.003, 0.003), (0.004, 0.004)]>

и если я попытаюсь spos.transform_to(tpos).obstime, время останется неизменным <Time object: scale='utc' format='jyear' value=1991.25>.

Что на самом деле делает метод transform_to? Какой метод / функцию мне на самом деле нужно вызвать, чтобы поместить их в один и тот же кадр?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...