我正在尝试使用astropy坐标包来匹配目录源,并且我有三个不同的数据文件。我的最终目标是所有三个文件都包含相同确切来源的数据。
我认为我已经弄清楚了,因为当我比较文件F435W.csv
和F550M.csv
时,代码似乎可以正常工作,并且最终都获得了相同数量的源,就像我想要的那样。当我使用完全相同的代码将我的第三个文件F625W.csv
与F435W.csv
进行比较时,我得到了IndexError: index 6442 is out of bounds for axis 0 with size 6348
。为什么为什么一个文件却出现此错误,而另一个文件却没有?
这三个文件之间的源数目之间存在很大差异,这是我通常会导致此错误的原因,但是为什么它可以与数组长度不同的前两个文件一起工作却没有任何意义,但是而不是第三个文件的数组长度与前两个文件的长度不同。
import numpy as np
my_csv1 = np.genfromtxt('./F435W.csv', delimiter=',', dtype=float)
ra1, dec1 = my_csv1[:, 12], my_csv1[:, 13]
my_csv2 = np.genfromtxt('./F625W.csv', delimiter=',', dtype=float)
ra2, dec2 = my_csv2[:, 12], my_csv2[:, 13]
from astropy.coordinates import SkyCoord
from astropy import units as u
from astropy.coordinates import match_coordinates_sky
c = SkyCoord(ra1, dec1, frame='icrs', unit='deg')
catalog = SkyCoord(ra2, dec2, frame='icrs', unit='deg')
max_sep = 2.0*u.arcsec
idx, sep, _ = c.match_to_catalog_sky(catalog)
sep_constraint = idx[sep < max_sep]
c_matches = c[sep_constraint]
catalog_matches = c[idx[sep_constraint]]
print (len(c_matches), len(catalog_matches))
当使用F435W.csv
和F550M.csv
时,我的代码输出数组长度4703 4703
,因此它们的长度相同,源数相同。当我将F550M.csv
更改为F625.csv
时,我得到了IndexError
。根据错误信息,它似乎来自第19行c_matches = c[sep_constraint]