You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scikit-learn中BallTree的query_radius方法radius参数输入要求咨询

Scikit-learn BallTree query_radius方法radius参数输入规则说明

BallTree.query_radius方法的radius参数取值没有统一的固定换算规则,完全与你初始化BallTree实例时指定的距离度量(metric)保持一致,具体分两种常用场景说明:

地理坐标(经纬度)使用Haversine度量场景

如果初始化BallTree时指定metric='haversine',此时所有距离计算的单位为弧度,radius参数需要传入换算后的弧度值,换算公式为:
radius = 待搜索实际物理半径 / 地球半径

  • 地球半径常用取值为6371km(匹配公里单位的物理半径)或3956英里(匹配英里单位的物理半径),需与你使用的物理半径单位严格对应
  • 注意Haversine度量要求输入的经纬度坐标必须先转换为弧度值,若直接传入度为单位的经纬度,即使radius换算正确也会得到错误结果

常规度量使用场景

如果初始化BallTree时使用欧氏距离、曼哈顿距离等常规度量,radius参数直接传入与输入特征维度匹配的数值即可,无需额外换算。例如输入特征为平面直角坐标系下的米级坐标,要搜索50米范围内的点,直接传入radius=50即可。

常见结果不符合预期的排查点

  • 确认初始化BallTree时的metric参数与你预期的距离规则一致
  • 确认输入特征的单位/格式与metric要求匹配
  • 确认物理半径与地球半径的单位是否匹配

正确使用示例(Haversine场景)

import numpy as np
from sklearn.neighbors import BallTree

# 输入经纬度(格式为[纬度, 经度])先转换为弧度
coords = np.radians(np.array([
    [39.9, 116.3], # 北京
    [31.2, 121.4], # 上海
    [23.1, 113.2]  # 广州
]))
# 初始化BallTree,指定haversine度量
tree = BallTree(coords, metric='haversine')

# 搜索北京周边100公里范围内的点,换算为弧度单位
search_radius = 100 / 6371
result_indices = tree.query_radius(np.radians(np.array([[39.9, 116.3]])), r=search_radius)

内容的提问来源于stack exchange,提问作者JoeShmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 15:09:04