Фон: у меня есть два каталога, состоящие из позиций пространственных объектов. Моя цель - найти похожие в обоих каталогах с максимальной разницей в angular расстоянии определенного значения. Один из них называется bss , а другой - super .
Вот полный код, который я написал
import numpy as np
def crossmatch(bss_cat, super_cat, max_dist):
matches=[]
no_matches=[]
def find_closest(bss_cat,super_cat):
dist_list=[]
def angular_dist(ra1, dec1, ra2, dec2):
r1 = np.radians(ra1)
d1 = np.radians(dec1)
r2 = np.radians(ra2)
d2 = np.radians(dec2)
a = np.sin(np.abs(d1-d2)/2)**2
b = np.cos(d1)*np.cos(d2)*np.sin(np.abs(r1 - r2)/2)**2
rad = 2*np.arcsin(np.sqrt(a + b))
d = np.degrees(rad)
return d
for i in range(len(bss_cat)): #The problem arises here
for j in range(len(super_cat)):
distance = angular_dist(bss_cat[i][1], bss_cat[i][2], super_cat[j][1], super_cat[j][2]) #While this is supposed to produce single floating point values, it produces numpy.ndarray consisting of three entries
dist_list.append(distance) #This list now contains numpy.ndarrays instead of numpy.float values
for k in range(len(dist_list)):
if dist_list[k] < max_dist:
element = (bss_cat[i], super_cat[j], dist_list[k])
matches.append(element)
else:
element = bss_cat[i]
no_matches.append(element)
return (matches,no_matches)
Когда он установлен отдельно функция angular_dist(ra1, dec1, ra2, dec2)
выдает единственное значение numpy .float, как и ожидалось. Но когда используется внутри for l oop в этой функции crossmatch(bss_cat, super_cat, max_dist)
, он генерирует numpy .ndarrays вместо numpy .float. Я сказал это и внутри кода. Я не знаю, где код не работает. Пожалуйста, помогите