0

我的代码从文本文件中获取 RA 和 DEC 值(str 形式的一些坐标),并使用 astroquery 来查询与这些 RA 和 DEC 数据相关的对象,并显示这些对象及其属性的表。然后我把它们放到一个列表中。但是查询有时会找到超过 1 个对象。我想使用 GetClosest() 推荐来查找最近的对象,以便仅将最接近的对象放入我的列表中。这是我的代码的一部分:


catalog=[]
catalog2=[]

exception_list = ['b','c','d','e','f','g','h','j','k']

rad1='0.001s'
rad2='0.01s'
rad3='0.1s'
rad4='1s'
rad5='5s'


for i in range(len(RA)):
        result_table = customSimbad.query_region(coord.SkyCoord(ra=RA[i], dec=DEC[i], unit=(u.hourangle, u.deg)), radius= rad1)
        
        if result_table is None:
            result_table = customSimbad.query_region(coord.SkyCoord(ra=RA[i], dec=DEC[i], unit=(u.hourangle, u.deg)), radius= rad2)
            if result_table is None:
                result_table = customSimbad.query_region(coord.SkyCoord(ra=RA[i], dec=DEC[i], unit=(u.hourangle, u.deg)), radius= rad3)
                if result_table is None:
                    result_table = customSimbad.query_region(coord.SkyCoord(ra=RA[i], dec=DEC[i], unit=(u.hourangle, u.deg)), radius= rad4)
                    if result_table is None:
                        result_table = customSimbad.query_region(coord.SkyCoord(ra=RA[i], dec=DEC[i], unit=(u.hourangle, u.deg)), radius= rad5)
        if result_table is None:
            catalog.append([i,None])
        else:
            for obj in result_table:
                catalog.append([i,obj[0],RA[i],DEC[i],str(obj[1]),str(obj[2]),obj[4] if obj[12]!='--' else None,obj[12] if obj[12]!='--' else None,obj[13] if obj[13]!='--' else None,obj[14] if obj[14]!='--' else None,obj[15] if obj[15]!='--' else None,obj[16] if obj[16]!='--' else None,obj[17] if obj[17]!='--' else None,obj[18] if obj[18]!='--' else None,obj[19] if obj[19]!='--' else None,obj[20] if obj[20]!='--' else None,obj[21] if obj[21]!='--' else None,obj[22] if obj[22]!='--' else None,obj[23] if obj[23]!='--' else None])
                if not obj[0][len(obj[0])-1:] in exception_list :
                    catalog2.append([i,obj[0],RA[i],DEC[i],str(obj[1]),str(obj[2]),obj[4] if obj[12]!='--' else None,obj[12] if obj[12]!='--' else None,obj[13] if obj[13]!='--' else None,obj[14] if obj[14]!='--' else None,obj[15] if obj[15]!='--' else None,obj[16] if obj[16]!='--' else None,obj[17] if obj[17]!='--' else None,obj[18] if obj[18]!='--' else None,obj[19] if obj[19]!='--' else None,obj[20] if obj[20]!='--' else None,obj[21] if obj[21]!='--' else None,obj[22] if obj[22]!='--' else None,obj[23] if obj[23]!='--' else None])

所以我想将最接近的 RA[i] 与 obj[1] 和 DEC[i] 与 obj[2] 匹配。我怎样才能做到这一点?

4

1 回答 1

0

你可以试试这个:

def FindClosest(input_list, input_point):
    output_value = min(map(lambda x: [abs(x[0] - input_point[0]), x[1]], input_list), key = lambda k: k[0])
    return [ input_point[0], input_point[1] * output_value[1] ]

result = list(map(lambda x: FindClosest(calculated_list, x), output_list))
于 2022-02-02T07:53:07.170 回答