2015-11-18 81 views
0

我正在爲一個項目做一些目錄匹配,發現使用astropy和其他座標匹配軟件包(例如Topcat)相比,我得到的結果是不同的。特別是,我不明白爲什麼下面的代碼會產生不對稱的結果Astropy:不對稱目錄匹配結果

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

在這裏,我只是扭轉目錄順序,得到不同的結果。特別是對於我的項目來說,差異要大得多,我不確定問題是什麼。

謝謝!

回答

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])