主要内容

rangesearch

找到所有的邻居指定距离内使用输入数据

描述

Idx= rangesearch (X,Y,r)发现所有的X内点的距离rY点。的行XY对应于观测,列对应的变量。

例子

(Idx,D)= rangesearch (X,Y,r)还返回之间的距离Y点和X点的距离内r

例子

(Idx,D)= rangesearch (X,Y,r,名称,值)使用一个或多个指定附加选项名称-值对参数。例如,您可以指定最近邻搜索方法和使用的距离度量。

例子

全部折叠

找到X在欧氏距离的点1.5每一个Y点。这两个XY是五维正态分布变量的样本。

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

输入参数

全部折叠

输入数据,指定为一个mx——- - - - - -n每一行代表一个数字矩阵n维点。列数n必须等于列数Y

数据类型:|

查询点,指定为一个我的——- - - - - -n每一行代表一个数字矩阵n维点。列数n必须等于列数X

数据类型:|

搜索半径大约每个查询点,指定为负的标量。rangesearch找到所有X点距离内(行)r每一个Y点。取决于距离的意义“距离”名称-值对的论点。

数据类型:|

名称-值对的观点

指定可选的逗号分隔条名称,值参数。的名字参数名称和吗价值相应的价值。的名字必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家

例子:rangesearch (X, Y, 1.4,“距离”,“seuclidean”,“规模”,差(X))指定找到所有的观察X在距离1.4每个观测的Y,使用一个标准化的欧几里得距离的四分位范围X

最近邻搜索方法,指定为逗号分隔组成的“NSMethod”和其中一个值。

价值 描述
“kdtree”

创建和使用一个Kd-tree找到最近的邻居。“kdtree”距离度量是有效的只有当这些选项之一:

  • “chebychev”

  • “cityblock”

  • “欧几里得”

  • 闵可夫斯基的

“详尽” 使用穷举搜索算法。软件计算距离X指出每个Y点找到最近的邻居。

“kdtree”时默认值的列数X小于或等于什么10,X不是稀疏,距离度量是有效吗“kdtree”指标。否则,默认值是“详尽”

例子:“NSMethod”、“详尽”

距离度量,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 -样本之间的斯皮尔曼等级相关的观察(作为序列的值)。
@distfun

自定义距离函数处理。距离函数的形式

函数ZJ D2 = distfun(子)%计算距离
在哪里

  • 是1 -n包含一个行向量XY

  • ZJ是一个——- - - - - -n矩阵包含多个行XY

  • D2是一个1的向量距离,D2 (j)是观察之间的距离ZJ (j,:)

有关更多信息,请参见距离度量

例子:“距离”,“闵可夫斯基”

闵可夫斯基距离度量指数,指定为逗号分隔组成的“P”和积极的标量。这个论点是有效的前提“距离”闵可夫斯基的

例子:“P”4

数据类型:|

协方差矩阵的Mahalanobis距离度量,指定为逗号分隔组成的“浸”和一个正定矩阵。这个论点是有效的只有当“距离”“mahalanobis”

例子:“浸”,眼睛(4)

数据类型:|

标准化的欧氏距离度量,尺度参数值指定为逗号分隔组成的“规模”和一个负的向量。规模长度等于列数X。每个坐标中的一行之间的区别X和查询点的对应元素规模。这个论点是有效的只有当“距离”“seuclidean”

例子:“规模”,差(X)

数据类型:|

最大数量的叶子节点的数据点Kd-tree,指定为逗号分隔组成的“BucketSize”和一个正整数标量。这个论点是有效的只有当NSMethod“kdtree”

例子:“BucketSize”, 20

数据类型:|

国旗返回指数进行排序根据距离,指定为逗号分隔组成的“SortIndices”,要么真正的(1)或(0)。

为了更快的性能时Y包含了许多的观察,有许多最近的点X,你可以设置SortIndices。在这种情况下,rangesearch返回最近的点的指数排名不分先后。当SortIndices真正的,功能安排最近的点的指数在距离升序排列。

例子:“SortIndices”,假的

数据类型:逻辑

输出参数

全部折叠

指数最近的点,作为细胞返回数组的数值向量。

Idx是一个我的——- - - - - -1单元阵列,我的的行数在吗Y。向量Idx {j}包含点(行)的指标X他们的距离Y (j,:)不大于r。如果SortIndices真正的,然后rangesearch安排指数在距离升序排列。

距离查询点最近的点,作为细胞返回数组的数值向量。

D是一个我的——- - - - - -1单元阵列,我的的行数在吗YD {j}包含值之间的距离Y (j,:)点(行)X (Idx {j},:)。如果SortIndices真正的,然后rangesearch按升序排列的距离。

提示

  • 对于一个固定的积极的真正价值r,rangesearch发现所有的X点在一个距离r每一个Y点。找到kX这是最近的Y点,对于一个固定的正整数k,使用knnsearch

  • rangesearch不保存搜索对象。创建一个搜索对象,使用createns

算法

  • 的概述kd-tree算法,看到再搜索使用kd tree

  • 穷举搜索算法发现每一个点的距离X在每一个点Y

选择功能

如果你设置rangesearch函数“NSMethod”适当的名称-值对参数值(“详尽”或一个详尽的搜索算法“kdtree”对于一个Kd-tree算法),然后搜索结果相当于获得的结果进行一个距离搜索使用rangesearch对象的功能。不像rangesearch函数,rangesearch目标函数需要一个ExhaustiveSearcherKDTreeSearcher模型对象。

扩展功能

介绍了R2011b