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

基于距离而非邻居的KNN:三列数据下的邻近点查询需求

基于距离阈值的KNN邻近点查询实现

我来帮你搞定这个基于距离而非固定邻居数的邻近点查询需求。先明确下我们的基础数据集:

原始数据集

ABDistance
point_apoint_b20
point_apoint_c30
point_apoint_d40
point_apoint_e25
point_gpoint_a26
point_cpoint_d30
point_cpoint_e30
point_dpoint_e40

需求说明

我们需要实现一个基于距离阈值的邻近点查询功能(区别于传统固定k值的KNN):给定目标点和距离上限,找出所有与该点的距离不超过阈值的邻近点。比如查询point_a周边28英里内的点,结果应该是point_b、point_e、point_g。

实现思路与代码示例

这里我用Python来实现这个功能,逻辑清晰易懂:

  1. 先把数据集加载成便于处理的DataFrame结构
  2. 编写查询函数,遍历所有记录:
    • 检查记录中的任意一个点是否是目标点
    • 如果是,判断对应的距离是否小于等于阈值
    • 用集合收集符合条件的另一个点,自动避免重复(比如point_a <-> point_g和point_g <-> point_a属于同一邻近关系)
import pandas as pd

# 加载数据集
data = [
    ["point_a", "point_b", 20],
    ["point_a", "point_c", 30],
    ["point_a", "point_d", 40],
    ["point_a", "point_e", 25],
    ["point_g", "point_a", 26],
    ["point_c", "point_d", 30],
    ["point_c", "point_e", 30],
    ["point_d", "point_e", 40],
]
df = pd.DataFrame(data, columns=["A", "B", "Distance"])

def find_neighbors_by_distance(target_point, max_distance):
    neighbors = set()
    # 遍历所有距离记录
    for _, row in df.iterrows():
        if row["A"] == target_point and row["Distance"] <= max_distance:
            neighbors.add(row["B"])
        elif row["B"] == target_point and row["Distance"] <= max_distance:
            neighbors.add(row["A"])
    return sorted(neighbors)

# 测试查询
result = find_neighbors_by_distance("point_a", 28)
print(f"point_a周边28英里内的邻近点:{result}")
# 输出:point_a周边28英里内的邻近点:['point_b', 'point_e', 'point_g']

关键点说明

  • 用集合存储邻近点,自动去重,避免因双向记录导致的重复结果
  • 同时处理A是目标点和B是目标点的情况,确保不会遗漏反向的距离记录
  • 最后返回排序后的结果,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:19:44