Я пытаюсь сопоставить источники каталога, используя пакет координат астропии, и у меня есть три разных файла данных. Моя конечная цель - чтобы все три файла содержали данные для одних и тех же точных источников.
Я думал, что понял это, потому что когда я сравниваю файлы 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]