Вложенный для l oop, производящий большее количество значений, чем ожидалось- Python - PullRequest
0 голосов
/ 25 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...