首页 > 其他分享 >【Matlab】基于KDtree的最近邻搜索和范围搜索

【Matlab】基于KDtree的最近邻搜索和范围搜索

时间:2023-07-30 16:00:37浏览次数:43  
标签:KDtree targetPoint scatter3 绘制 搜索 result data filled Matlab

摘要:介绍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")

img

%% 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")

img

%% 先创建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")

img

标签:KDtree,targetPoint,scatter3,绘制,搜索,result,data,filled,Matlab
From: https://www.cnblogs.com/aksoam/p/17591563.html

相关文章

  • 基于Alexnet深度学习神经网络的人脸识别算法matlab仿真
    1.算法理论概述       人脸识别是计算机视觉领域中一个重要的研究方向,其目的是识别不同人的面部特征以实现自动身份识别。随着深度学习神经网络的发展,基于深度学习神经网络的人脸识别算法已经成为了当前最先进的人脸识别技术之一。本文将详细介绍基于AlexNet深度学习神经......
  • 四旋翼飞行器的动力学、控制和路径规划matlab仿真
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • matlab做施密特正交
    fori=1:tiqvduanifi==1shimi=[shimi,duan(:,i)]elsetou=duan(:,i)'*shimimo=shimi.*shimimo=sum(mo,1)%mo=sqrt(mo)k=tou./mok=repmat(k,[h1])alltou=k.*shimialltou=sum(alltou,2)shimi=[shimi,duan(:,i)-alltou]endendshimo=repmat(sqrt(sum(shimi.*shimi,1)),[......
  • Codeforces Round 105 (Div. 2) - D. Bag of mice DP 或 记忆化搜索 求概率
    D.Bagofmice题意待补充~思路可利用DP或者记忆化搜索求解本问题,实际上这两个方法等价。当\(w=0\)时必输当$w\ne0$但$b=0$时必赢剩下的情况,先考虑一个问题:赢的局面是怎么构成的?代码记忆化搜索//>>>Qiansui#include<bits/stdc++.h>#definelllong......
  • 【Matlab】基于粒子群优化算法优化BP神经网络的数据分类预测
    【Matlab】基于粒子群优化算法优化BP神经网络的数据分类预测(Excel可直接替换数据)1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码5.1fun.m5.2main.m6.完整代码6.1fun.m6.2main.m7.运行结果1.模型原理“基于粒子群优化算法优化BP神经网络的数据分类预测”是一种结合了粒......
  • 【Matlab】判断点和多面体位置关系的两种方法实现
    分别是向量判别法(算法来自他人论文)、体积判别法(code是我从网上找的)。方法一:向量判别法方法来自一会议论文:《判断点与多面体空间位置关系的一个新算法_石露》2008年,知网、万方、百度学术有收录。优点:适合任意多面体计算简单速度快算法原理Matlab实现主函数为InPo......
  • 基于matlab实现无人机自适应控制
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 【无人机控制】基于线性二次型调节器LQR实现无人机飞行控制附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • c++字符串搜索之KMP
    classSolution{private:voidgetNext(int*arr,stringstr){intlen=str.length();arr[0]=0;intj=0;for(inti=1;i<len;i++){while(j>0&&str[i]!=str[j]){......
  • 根据图片搜索excel
    问题描述:在excel使用中,当我们用大量的excel记录图文信息的时候,如果excel过多,比如成百上千个,里面都是包含大量的图片。这个时候如果想要根据图片快速找到这张图片可能被哪些excel包含,手动查找肯定比较繁琐,实际工作中我们发现很多使用excel这样记录信息的人都有这个烦恼,我们可以做一......