摘要:介绍Matlab的rangesearch()函数和knnsearch()函数。

rangesearch() —— 根据给定k-维数据集,返回指定距离范围内的所有数据点

knnsearch() —— 根据给定k-维数据集,返回最近的K个数据点

%% 给定数值矩阵(input data),返回最近点的K个点
% data matrix,100 x 3,表示100个空间点
data = [hospital.Age, hospital.Weight, 66 * rand(100, 1)];
% 绘制空间点
scatter3(data(:, 1), data(:, 2), data(:, 3), 36, [1 0 0], "filled", "o")
hold on
zlabel 'Z'
% 目标点有两个
targetPoint = [50 162 21;
12 180 31];
% 绘制目标点
scatter3(targetPoint(:, 1), targetPoint(:, 2), targetPoint(:, 3), 72, "magenta", "filled", "hexagram")
hold on
tic
% 搜索目标点周围最近的3个点,返回值为data matrix的row index.
id = knnsearch(data, targetPoint, "Distance", "euclidean", "K", 3, "NSMethod", "kdtree");
toc
result = data(reshape(id,[1,6]), :);
% 绘制result 点
scatter3(result(:, 1), result(:, 2),result(:,3), 72, "blue", "filled", "square")

%% rangesearch():返回指定距离内的所有行索引
% dataCloud是10维数据,545580个数据点。
data = dataCloud(:,1:3);
% 绘制散点
scatter3(data(:, 1), data(:, 2), data(:, 3), 12, [1 0 0], "filled", "o")
hold on
zlabel 'Z'
targetPoint = [40164.5 139.539 496.914];
% 绘制目标点
scatter3(targetPoint(:, 1), targetPoint(:, 2), targetPoint(:, 3), 36, "magenta", "filled", "hexagram")
hold on
tic
% knn search using input data,直接给定数据集,搜索半径为50
id = rangesearch(data(:, 1 : 3), targetPoint, 50, "NSMethod", "kdtree", "Distance", "euclidean");
toc
result = data(id{1}, :);
% 绘制result 点
scatter3(result(:, 1), result(:, 2), result(:, 3), 72, "blue", "filled", "square")

%% 先创建KDtree model ,以此为基础返回范围内的点
data = dataCloud;
% 绘制散点
scatter3(data(:, 1), data(:, 2), data(:, 3), 12, [1 0 0], "filled", "o")
hold on
zlabel 'Z'
targetPoint = [40235.1142325237 -128.940013761462 738.5117255760920];
% 绘制目标点
scatter3(targetPoint(:, 1), targetPoint(:, 2), targetPoint(:, 3), 36, "magenta", "filled", "hexagram")
hold on mdl = KDTreeSearcher(data(:, 1 : 3), "Distance", 'euclidean');
tic
% knn search using KDtree model,直接给定数据集,搜索半径为50
id = rangesearch(mdl, targetPoint, 50, "Distance", "euclidean");
toc
result = data(id{1}, :);
% 绘制result 点
scatter3(result(:, 1), result(:, 2), result(:, 3), 72, "blue", "filled", "square")

【Matlab】基于KDtree的最近邻搜索和范围搜索的更多相关文章

  1. 基于KD-Tree的最近邻搜索

    目标:查询目标点附近的10个最近邻邻居. load fisheriris x = meas(:,:); figure(); g1=gscatter(x(:,),x(:,),species); %spe ...

  2. 基于R-Tree的最近邻查询

    转自基于R-Tree的最近邻查询 BAB(Branch.and.Band)算法是由Nick Roussopoulousnl等人于1995年提出的,是最早的基于R.树的静态最近邻查询算法.该算法使用MI ...

  3. 基于用户的最近邻协同过滤算法(MovieLens数据集)

      基于用户的最近邻算法(User-Based Neighbor Algorithms),是一种非概率性的协同过滤算法,也是推荐系统中最最古老,最著名的算法. 我们称那些兴趣相似的用户为邻居,如果用户 ...

  4. 基于 Kafka 的实时数仓在搜索的实践应用

    一.概述 Apache Kafka 发展至今,已经是一个很成熟的消息队列组件了,也是大数据生态圈中不可或缺的一员.Apache Kafka 社区非常的活跃,通过社区成员不断的贡献代码和迭代项目,使得 ...

  5. Elasticsearch深入搜索之全文搜索及JavaAPI使用

    一.基于词项与基于全文 所有查询会或多或少的执行相关度计算,但不是所有查询都有分析阶段. 和一些特殊的完全不会对文本进行操作的查询(如 bool 或 function_score )不同,文本查询可以 ...

  6. Elasticsearch核心技术(五):搜索API和搜索运行机制

    本文将从数据存储和搜索的角度简单分析Elasticsearch的搜索运行机制,主要涉及搜索API.搜索机制.存在问题和解决方案. 4.1 Search API Search API允许用户执行一个搜索 ...

  7. 高德地图-搜索服务-POI搜索

    高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...

  8. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

    原文:[高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公 ...

  9. excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史

    前两天,一个朋友问我,有没有办法在excel里实现一个表单里是原始数据,在另一个表单里显示搜索到的行,搜索关键词可用~分隔开,并把搜索历史记录下来? 我想了想,用vba实现肯定可以啊,但是我又在想,有 ...

  10. python 全栈开发,Day115(urlencode,批量操作,快速搜索,保留原搜索条件,自定义分页,拆分代码)

    今日内容前戏 静态字段和字段 先来看下面一段代码 class Foo: x = 1 # 类变量.静态字段.静态属性 def __init__(self): y = 6 # 实例变量.字段.对象属性 # ...

随机推荐

  1. [Java]多个参数的非空判断,不要再使用多个if挨个判断了!(多参数非空判断技巧)

    先上示例代码: if (StringUtils.isAnyBlank(form, to, subject, content)) { log.error("发送人,接收人,主题,内容均不可为空 ...

  2. How Liquibase Finds Files: Liquibase Search Path

    https://docs.liquibase.com/concepts/changelogs/how-liquibase-finds-files.html For example, if your r ...

  3. IDEA自动导包(全局设置)

    选择[File]-->[other settings]-->[settings for new projects](全局设置),然后搜索[Auto Import],勾选以下两个选项即可: ...

  4. Tesseract开源的OCR工具及python pytesseract安装使用

    一 .介绍 Tesseract是一款由Google赞助的开源OCR. pytesseract是python包装器,它为可执行文件提供了pythonic API. Tesseract 已经有 30 年历 ...

  5. Qt/C++地图导航app/支持qml/手机运行/输入起点终点规划路径/模拟轨迹移动

    一.前言说明 搞Qt地图开发这块,随着研究的深入,用户的需求变化,最近又需要在手机上运行,由于本地图组件依赖浏览器控件,而手机安卓上的Qt并没有带qwebengine控件,怎么办呢,不断的努力验证下, ...

  6. 国产系统UOS上的可视化大屏电子看板系统

    一.功能特点 采用分层设计,整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件. 子控件包括饼图.圆环图.曲线图.柱状图.柱状分组图.横向柱状图.横向柱状分组图.合格率 ...

  7. [转]CMake与Make最简单直接的区别

    写程序大体步骤为: 1.用编辑器编写源代码,如.c文件. 2.用编译器编译代码生成目标文件,如.o. 3.用链接器连接目标代码生成可执行文件,如.exe. 但如果源文件太多,一个一个编译时就会特别麻烦 ...

  8. [转]升级/重装win10系统--提示无法验证密钥的解决办法

    在由win7系统升级到win10时,出现了无法验证密钥的问题(还未提示输入密钥的时候就直接提示无法验证密钥),英文版报错为:Windows 10 setup has failed to validat ...

  9. 探探的IM长连接技术实践:技术选型、架构设计、性能优化

    本文由探探服务端高级技术专家张凯宏分享,原题"探探长链接项目的Go语言实践",因原文内容有较多错误,有修订和改动. 1.引言 即时通信长连接服务处于网络接入层,这个领域非常适合用G ...

  10. 使用Docker编译PaddlePaddle

    在ubuntu中使用Docker编译PaddlePaddle 要在ubuntu中使用docker编译paddle框架,首先分为以下几个步骤: 安装docker环境 拉取paddle的docker镜像 ...