rangesearch
找到所有的邻居指定距离内使用输入数据
描述
例子
找到指定距离内的所有点
找到X
在欧氏距离的点1.5
每一个Y
点。这两个X
和Y
是五维正态分布变量的样本。
rng (“默认”)%的再现性X = randn (100 5);Y = randn (10、5);[Idx D] = rangesearch (X, Y, 1.5)
Idx =10×1单元阵列{1 x7双}{1 x2双}{1 x11双}{1 x2双}{1 x12双}{1 x9双}{[89]}{1 x0双}{1 x0双}{1 x0双}
D =10×1单元阵列{1 x7双}{1 x2双}{1 x11双}{1 x2双}{1 x12双}{1 x9双}{[1.1739]}{1 x0双}{1 x0双}{1 x0双}
在这种情况下,最后三人Y
点是多1.5
距离任何X
点。X(89年:)
是1.1739
距离:Y(7日)
,没有其他X
点是在距离1.5
的:Y(7日)
。X
包含12
内点的距离1.5
的:Y(5日)
。
在集群数据找到最近的点
从每个生成5000个随机点三个不同的多元正态分布。转变的方式分布,随机生成的点可能会形成三个单独的集群。
rng (“默认”)%的再现性N = 5000;dist = 10;X = [mvnrnd([0 0)、眼睛(2)、N);mvnrnd (dist *[1],眼(2),N);mvnrnd (dist *[1],眼(2),N)];
每一个点的X
,找到点X
在一个半径经销
远离这一点。对于更快的计算,指定保持指数最近的邻居无序。选择第一个点X,找到最近的邻国。
Idx = rangesearch (X, X,经销,“SortIndices”、假);x = x (1:);nearestPoints = X (: Idx {1});
中找到的值X
不是最近的邻居的x
。显示这些点在一个颜色和最近的邻居x
在一个不同的颜色。标签的x
黑色,圆了。
nonNearestIdx = true(大小(X, 1), 1);nonNearestIdx (Idx {1}) = false;散射(X (nonNearestIdx, 1), X (nonNearestIdx 2))在散射(nearestPoints (: 1) nearestPoints(:, 2)散射(x (1), (2),“黑”,“填充”)举行从
找到距离最近的点使用自定义函数
发现的病人病人
数据集,在一定年龄和体重的病人Y
。
加载病人
数据集。年龄
值是在年,重量
的值在磅。
负载病人X =(年龄体重);Y = [162;30 169;40 168];%的新病人
创建一个自定义距离函数distfun
决定患者的年龄和体重之间的距离。例如,据distfun
两个病人,相隔一年在年龄和体重相距一个距离单元相同。类似地,两个病人有相同的年龄,相距5磅的体重也是一个距离单元分开。
类型distfun.m%显示distfun内容。m文件
函数D2 = distfun(子、ZJ) ageDifference = abs(子(1)ZJ (: 1));weightDifference = abs(子(2)zj (:, 2));D2 = ageDifference + 0.2 * weightDifference;结束
注意:如果单击按钮位于右上角的这个例子和开放的MATLAB®中的示例,然后用MATLAB打开示例文件夹。这个文件夹包括函数文件distfun.m
。
发现病人在X
在距离2
的病人中Y
。
[Idx D] = rangesearch (X, Y, 2,“距离”@distfun)
Idx =3×1单元阵列{1 x0双}{1 x0双}{[41]}
D =3×1单元阵列{1 x0双}{1 x0双}{[1.8000]}
第三个病人Y
是唯一一个有病人吗X
的距离内2
。
显示年龄
和重量
值最近的病人X
随着年龄的病人40
和重量168年
。
X (Idx {3}:)
ans =1×2164年39
输入参数
X
- - - - - -输入数据
数字矩阵
输入数据,指定为一个mx——- - - - - -n每一行代表一个数字矩阵n维点。列数n必须等于列数Y
。
数据类型:单
|双
Y
- - - - - -查询点
数字矩阵
查询点,指定为一个我的——- - - - - -n每一行代表一个数字矩阵n维点。列数n必须等于列数X
。
数据类型:单
|双
名称-值对的观点
指定可选的逗号分隔条名称,值
参数。的名字
参数名称和吗价值
相应的价值。的名字
必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家
。
rangesearch (X, Y, 1.4,“距离”,“seuclidean”,“规模”,差(X))
指定找到所有的观察X
在距离1.4
每个观测的Y
,使用一个标准化的欧几里得距离的四分位范围X
。
“距离”
- - - - - -距离度量
“欧几里得”
(默认)|“seuclidean”
|“mahalanobis”
|“cityblock”
|闵可夫斯基的
|“chebychev”
|函数处理|……
距离度量,rangesearch
使用指定为逗号分隔组成的“距离”
在这个表的一个值。
价值 | 描述 |
---|---|
“欧几里得” |
欧氏距离。 |
“seuclidean” |
标准化的欧氏距离。每个坐标中的一行之间的区别X 和一个查询是通过除以相应的扩展元素的标准差计算X ,性病(X, omitnan) 。要指定另一个扩展,可以使用“规模” 名称-值对的论点。 |
“mahalanobis” |
使用正定Mahalanobis距离,计算协方差矩阵C 。的默认值C 样本协方差矩阵吗X 所计算的X (X, omitrows) 。指定一个不同的值C ,可以使用“浸” 名称-值对的论点。 |
“cityblock” |
城市街区的距离。 |
闵可夫斯基的 |
闵可夫斯基距离。默认的指数是2 。指定一个不同的指数,使用“P” 名称-值对的论点。 |
“chebychev” |
Chebychev距离(最大坐标差异)。 |
的余弦 |
1 -之间的夹角的余弦值观察(视为向量)。 |
“相关” |
1 -样本线性相关性的观察(作为序列的值)。 |
“汉明” |
汉明距离、坐标不同的百分比。 |
“jaccard” |
1 - Jaccard系数、不同比例的非零坐标。 |
“枪兵” |
1 -样本之间的斯皮尔曼等级相关的观察(作为序列的值)。 |
@ |
自定义距离函数处理。距离函数的形式 函数ZJ D2 = distfun(子)%计算距离…
|
有关更多信息,请参见距离度量。
例子:“距离”,“闵可夫斯基”
“P”
- - - - - -闵可夫斯基距离度量的指数
2
(默认)|积极的标量
闵可夫斯基距离度量指数,指定为逗号分隔组成的“P”
和积极的标量。这个论点是有效的前提“距离”
是闵可夫斯基的
。
例子:“P”4
数据类型:单
|双
“浸”
- - - - - -协方差矩阵的距离度量
X (X, omitrows)
(默认)|正定矩阵
协方差矩阵的Mahalanobis距离度量,指定为逗号分隔组成的“浸”
和一个正定矩阵。这个论点是有效的只有当“距离”
是“mahalanobis”
。
例子:“浸”,眼睛(4)
数据类型:单
|双
“规模”
- - - - - -标准化的欧氏距离度量尺度参数值
性病(X, omitnan)
(默认)|负的向量
标准化的欧氏距离度量,尺度参数值指定为逗号分隔组成的“规模”
和一个负的向量。规模
长度等于列数X
。每个坐标中的一行之间的区别X
和查询点的对应元素规模
。这个论点是有效的只有当“距离”
是“seuclidean”
。
例子:“规模”,差(X)
数据类型:单
|双
“BucketSize”
- - - - - -最大数量的数据点的叶节点Kd-tree
50
(默认)|正整数标量
最大数量的叶子节点的数据点Kd-tree,指定为逗号分隔组成的“BucketSize”
和一个正整数标量。这个论点是有效的只有当NSMethod
是“kdtree”
。
例子:“BucketSize”, 20
数据类型:单
|双
输出参数
Idx
——指数最近的点
单元阵列的数值向量
指数最近的点,作为细胞返回数组的数值向量。
Idx
是一个我的——- - - - - -1
单元阵列,我的的行数在吗Y
。向量Idx {j}
包含点(行)的指标X
他们的距离Y (j,:)
不大于r
。如果SortIndices
是真正的
,然后rangesearch
安排指数在距离升序排列。
D
——查询点最近的点的距离
单元阵列的数值向量
距离查询点最近的点,作为细胞返回数组的数值向量。
D
是一个我的——- - - - - -1
单元阵列,我的的行数在吗Y
。D {j}
包含值之间的距离Y (j,:)
点(行)X (Idx {j},:)
。如果SortIndices
是真正的
,然后rangesearch
按升序排列的距离。
提示
算法
的概述kd-tree算法,看到再搜索使用kd tree。
选择功能
如果你设置rangesearch
函数“NSMethod”
适当的名称-值对参数值(“详尽”
或一个详尽的搜索算法“kdtree”
对于一个Kd-tree算法),然后搜索结果相当于获得的结果进行一个距离搜索使用rangesearch
对象的功能。不像rangesearch
函数,rangesearch
目标函数需要一个ExhaustiveSearcher
或KDTreeSearcher
模型对象。
扩展功能
高大的数组
计算和数组的行比装入内存。
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
使用笔记和限制:
代码生成的缺省值
“NSMethod”
名称-值对的观点是“详尽”
的列数X
大于7。的值
“距离”
名称-值对参数必须是一个编译时常量,不能自定义距离函数。的
“SortIndices”
不支持名称-值对的论点。金宝app输出参数总是排序。名字必须编译时常量参数名称-值对。例如,允许一个用户定义的指数的闵可夫斯基距离生成的代码,包括
{coder.Constant(的距离),coder.Constant(“闵可夫斯基”),coder.Constant (“P”), 0}
在arg游戏
的价值codegen
(MATLAB编码器)。与距离的顺序生成的代码可以与MATLAB的次序不同®由于数值精度。
当
rangesearch
使用kd-tree搜索算法和代码生成构建类型是一个墨西哥人函数,codegen
(MATLAB编码器)生成一个墨西哥人使用英特尔函数®线程构建块(TBB)并行计算。否则,codegen
生成的代码使用parfor
(MATLAB编码器)。墨西哥人的功能kd-tree搜索算法,
codegen
生成一个函数优化的墨西哥人使用英特尔TBB在多核平台上并行计算。您可以使用墨西哥人加速MATLAB函数算法。在英特尔TBB的详细信息,请参见https://software.intel.com/en-us/intel-tbb。如果您生成墨西哥人函数测试生成的代码
parfor
版本,您可以禁用英特尔TBB的使用。设置ExtrinsicCalls
墨西哥人配置对象的属性假
。有关详细信息,请参见coder.MexCodeConfig
(MATLAB编码器)。墨西哥人穷举搜索算法和功能独立的C / c++代码两种算法生成的代码的
rangesearch
使用parfor
(MATLAB编码器)创建循环,支持共享内存多核平台上并行运行生成的代码。金宝app如果你的编译器不支持开放的多处理(OpenMP)应用金宝app程序接口或禁用OpenMP库,MATLAB编码器™将parfor
循环,为
循环。找到支持的编译器金宝app,看看金宝app支持编译器。禁用OpenMP图书馆,设置EnableOpenMP
配置对象的属性假
。有关详细信息,请参见coder.CodeConfig
(MATLAB编码器)。
从R2020a开始,
rangesearch
返回整数类型(int32
)指标,而不是双精度指标,在独立的C / c++代码生成。因此,严格的单精度的函数允许支持当你使用单精确输入。金宝app墨西哥人的代码生成的函数仍然返回双精度指标与MATLAB的行为。
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。