0

我正在为一个项目做一些目录匹配,发现使用astropy与其他软件包进行坐标匹配(例如Topcat)相比,我得到的结果是不同的。特别是,我不明白为什么下面的代码会产生不对称的结果

import numpy as np
from astropy.coordinates import match_coordinates_sky, SkyCoord

# Get some random coordinates
ra1, ra2 = np.random.uniform(80, 90, size=1E6), np.random.uniform(80, 90, size=1E6)
dec1, dec2 = np.random.uniform(20, 30, size=1E6), np.random.uniform(20, 30, size=1E6)

# Define SkyCoord instances
c1 = SkyCoord(ra1, dec1, frame="icrs", unit="deg")
c2 = SkyCoord(ra2, dec2, frame="icrs", unit="deg")

# Do matching
idx1, dis1, _ = match_coordinates_sky(c1, c2, nthneighbor=1)
idx1 = idx1[dis1.arcsec < 2]
idx2, dis2, _ = match_coordinates_sky(c2, c1, nthneighbor=1)
idx2 = idx2[dis2.arcsec < 2]

# Print results
print(len(idx1), len(idx2))

这打印:10547 10553

这里我只是颠倒目录顺序,得到不同的结果。特别是,对于我的项目,差异要大得多,我不确定问题出在哪里。

谢谢!

4

1 回答 1

2

您使用的match_coordinates例程不是对称的。例如:

In [2]: c1 = SkyCoord(ra=[0], dec=[0], unit='deg')

In [3]: c2 = SkyCoord(ra=[0, 0], dec=[1./3600, 2./3600], unit='deg')

In [4]: from astropy.coordinates import match_coordinates_sky

In [5]: idx1, idis1, _ = match_coordinates_sky(c1, c2, nthneighbor=1)

In [6]: idx1
Out[6]: array([0])

In [7]: idis1
Out[7]: <Angle [ 0.00027778] deg>

In [8]: idx2, idis2, _ = match_coordinates_sky(c2, c1, nthneighbor=1)

In [9]: idis2
Out[9]: <Angle [ 0.00027778, 0.00055556] deg>

In [10]: idx2
Out[10]: array([0, 0])
于 2015-11-18T18:35:05.400 回答