主要内容

rangesearch

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

描述

Idx= rangesearch (XYr发现所有的X在距离内的点rY点。的行X而且Y对应观察结果,列对应变量。

例子

IdxD) = rangesearch (XYr对象之间的距离Y点和X在距离内的点r

例子

IdxD) = rangesearch (XYr名称,值使用一个或多个名称-值对参数指定其他选项。例如,您可以指定搜索中使用的最近邻搜索方法和距离度量。

例子

全部折叠

找到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单元阵列{[25 62 33 99 87 92 16]} {[92 25]} {[93 42 31 73 60 28 78 83 48 89 85]} {[92 41]} {[44 7 28 78 75 42 69 31 1 26 83 93]} {[15 31 89 41 27 17 29 60 34]} {[89]} {1x0 double} {1x0 double} {1x0 double}
D =10×1单元阵列{[0.9546 1.0987 1.3981 1.4140 1.4249 1.4822]}{[1.4203 1.4558]}{[0.7114 0.7552 1.0081 1.1324 1.1424 1.1637 1.2108 1.3824 1.3944…]}{[1.1244 1.4672]}{[0.7863 0.9326 0.9773 1.0508 1.1722 1.1934 1.3218 1.3623 1.3869…]} {[1.2824 1.2843 1.3342 1.3469 1.4154 1.4237 1.4625 1.4626 1.4744]} {[1.1739]} {1x0 double} {1x0 double} {1x0 double}

在这种情况下,是后三个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],eye(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),“黑”“填充”)举行

图中包含一个axes对象。axis对象包含3个散点类型的对象。

找到病人在病人在患者的一定年龄和体重范围内的数据集Y

加载病人数据集。的年龄价值是以年为单位的重量数值以磅为单位。

负载病人X =[年龄体重];Y = [20 162;30 169;40 168];%的新病人

创建一个自定义距离函数distfun这在年龄和体重方面决定了患者之间的距离。例如,根据distfun,两个年龄相差1岁、体重相同的患者相距一个距离单位。同样地,两个年龄相同、体重相差5磅的病人也相距一个距离单位。

类型distfun.m显示distfun的内容。m文件
函数D2 = distfun(ZI,ZJ) ageDifference = abs(ZI(1)-ZJ(:,1));weightDifference = abs(子(2)zj (:, 2));D2 =年龄差+ 0.2*体重差;结束

注意:如果单击位于此示例右上方部分的按钮并在MATLAB®中打开该示例,则MATLAB将打开示例文件夹。这个文件夹包含函数文件distfun.m

找到医院的病人X都在距离之内2的病人Y

[Idx D] = rangesearch (X, Y, 2,“距离”@distfun)
Idx =3×1单元阵列{1x0 double} {1x0 double} {[41]}
D =3×1单元阵列{1x0 double} {1x0 double} {[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,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:rangesearch (X, Y, 1.4,“距离”,“seuclidean”,“规模”,差(X))指定查找中的所有观察值X在距离1.4的每一个观察结果Y的四分位范围缩放的标准化欧几里得距离X

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

价值 描述
“kdtree”

创建并使用Kd树查找最近的邻居。“kdtree”仅当距离度量是以下选项之一时有效:

  • “chebychev”

  • “cityblock”

  • “欧几里得”

  • 闵可夫斯基的

“详尽” 使用穷尽搜索算法。该软件计算所有的距离X指出每个Y指向最近的邻居。

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

例子:“NSMethod”、“详尽”

距离度量,rangesearch使用,指定为逗号分隔的对,由“距离”和这个表中的一个值。

价值 描述
“欧几里得” 欧氏距离。
“seuclidean” 标准化的欧氏距离。每一行之间的坐标差X通过除以相应的标准偏差的元素来计算查询点X性病(X, omitnan).要指定另一个缩放,请使用“规模”名称-值对的论点。
“mahalanobis” 马氏距离,用正定协方差矩阵计算C.的默认值。C样本协方差矩阵是X,按X (X, omitrows).指定不同的值C,可以使用“浸”名称-值对的论点。
“cityblock” 城市街区的距离。
闵可夫斯基的 闵可夫斯基距离。默认指数为2.要指定不同的指数,请使用“P”名称-值对的论点。
“chebychev” 切比乔夫距离(最大坐标差)。
的余弦 1减去观测值之间夹角的余弦(作为向量处理)。
“相关” 1减去观察值之间的样本线性相关性(作为值序列处理)。
“汉明” 汉明距离,不同坐标的百分比。
“jaccard” 1减去雅卡德系数,非零坐标的百分比。
“枪兵” 1减去观察值之间的样本斯皮尔曼秩相关(作为值序列处理)。
@distfun

自定义距离函数手柄。距离函数有这样的形式

函数ZJ D2 = distfun(子)距离百分比计算...
在哪里

  • 是1 -n的一行XY

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

  • D2是一个-乘1的距离向量,和D2 (j)观察点之间的距离是多少而且ZJ (j,:)

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

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

闵可夫斯基距离度量的指数,指定为逗号分隔的对,由“P”一个正的标量。这个论点只有在“距离”闵可夫斯基的

例子:“P”4

数据类型:|

马氏距离度量的协方差矩阵,指定为逗号分隔的对,由“浸”一个正定矩阵。这个论点只有在“距离”“mahalanobis”

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

数据类型:|

标度参数值的标准化欧氏距离度量,指定为逗号分隔的对,由“规模”一个非负的向量。规模长度是否等于中的列数X.每一行之间的坐标差X的对应元素对查询点进行缩放规模.这个论点只有在“距离”“seuclidean”

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

数据类型:|

的叶节点中的最大数据点数Kd-树,指定为逗号分隔的对,由“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按升序排列距离。

提示

  • 对于一个固定的正实值rrangesearch发现所有的X在一定距离内的点r每一个Y点。找到kX最接近彼此的Y点,对于一个固定的正整数k,使用knnsearch

  • rangesearch不保存搜索对象。若要创建搜索对象,请使用createns

算法

选择功能

如果你设置rangesearch函数“NSMethod”名称-值对参数的适当值(“详尽”对于穷尽搜索算法或者“kdtree”对于一个KD-tree算法),则搜索结果与使用rangesearch对象的功能。不像rangesearch函数,rangesearch对象函数需要ExhaustiveSearcherKDTreeSearcher模型对象。

扩展功能

版本历史

介绍了R2011b

Baidu
map