主要内容

rangesearch.

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

描述

idx.= RangeSearch(XyR.找到所有的X距离内的点R.y要点。行的行Xy对应于观测值,列对应于变量。

例子

[idx.D.] = RangeSearch(XyR.也返回距离之间的距离y点和X在距离内的点R..

例子

[idx.D.] = RangeSearch(XyR.名称,价值使用一个或多个名称值对参数指定其他选项。例如,您可以指定最接近的邻居搜索方法和搜索中使用的距离度量。

例子

全部收缩

找出X在欧几里得距离内的点1.5每个y观点。两个都Xy是五维常数分布变量的样本。

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]} {[92 32 32 32 60 28 78 83 48 89 85]}}} {[92 41]} {[44 7 28 78 72 69 31 11 1 2683 93]} {[15 31 89 41 27 17 29 60 34] {1x0 double} {1x0 double} {1x0 double} {1x0 double} {1x0 double} {1x0 double} {1x0 double}
d =10×1个单元阵列{[1.4203 1.4558] {1x12 Double} {[1.2444 1.4558] {{[1.1739]} {1x0 double} {1x0 double} {1x0 double}

在这种情况下,最后三个y点不仅仅是1.5距离X观点。x(89,:)1.1739远离的距离y(7,:),也没有其他X点在距离范围内1.5y(7,:).X包含12.距离内的点1.5y(5,:).

从三个不同的多变量正常分布中的每一个生成5000个随机点。移动分发的手段,使得随机产生的点可能形成三个单独的集群。

rng (“默认”%的再现性n = 5000;dist = 10;x = [mvnrnd([0 0],眼睛(2),n);mvnrnd(dist * [1 1],眼睛(2),n);MVNRND(DIST * [ -  1 -1],EYE(2),N)];

对于每个点X,找到点X那是一个半径dist远离这一点。为了更快计算,指定要保留最近邻居未侵蚀的指标。选择X中的第一个点,并找到其最近的邻居。

idx = rangesearch(x,x,dist,'sortindices',错误的);x = x(1,:);regientPoints = X(IDX {1},:);

找到值X这不是最近的邻居X.在一个颜色和最近的邻居中显示这些点X用不同的颜色。标记点X用黑色,填充的圆圈。

nonearestidx = true(大小(x,1),1);nonnearestidx(idx {1})= false;散射(x(nonearestidx,1),x(nonearestidx,2))保持散射(regicalPoints(:,1),regientPoints(:,2))散射(x(1),x(2),'黑色的''填充') 抓住离开

图包含轴。轴包含3个类型的散射物。

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

加载病人数据集。这年龄价值是多年的,而且重量价值占磅。

加载病人x = [年龄重量];Y = [20 162;30 169;40 168];%新患者

创建自定义距离功能DISTFUN它决定了病人之间的年龄和体重之间的距离。例如,根据DISTFUN,两名患者在年龄分开并且具有相同的重量是一个距离单元。同样,两个具有相同年龄的患者,其重量分开五磅是一个距离单元。

类型DISTFUN.M.%显示distfun.m文件的内容
功能d2 = distfun(zi,zj)agedifference = abs(zi(1)-zj(:,1));掌权= abs(zi(2)-zj(:,2));D2 = Agedifference + 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,…,的家.

例子:RangeSearch(x,y,1.4,'距离','seuclidean','scale',iqr(x))指定查找所有观察X在距离1.4每个观察y,使用由四分位数范围缩放的标准化欧几里德距离X.

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

价值 描述
'kdtree'

创建和使用K.d树找到最近的邻居。'kdtree'仅在距离度量是其中一个选项之一时才有效:

  • 'chebbychev'

  • '城市街区'

  • 'euclidean'

  • 'minkowski'

'彻底的' 使用详尽的搜索算法。该软件计算所有距离X指出每个y指向最近的邻居。

'kdtree'默认值是当列数在X小于或等于10.X不是稀疏,距离度量是有效的一个'kdtree'指标。否则,默认值是'彻底的'.

例子:'nsmethod','穷举'

距离度量rangesearch.用途,指定为逗号分隔对组成'距离'和此表中的值之一。

价值 描述
'euclidean' 欧几里德距离。
'seuclidean' 标准化的欧几里德距离。行之间的每个坐标差异X并且通过将来自计算的标准偏差的相应元素除以从计算机的相应元素划分来缩放查询点Xstd(x,'omitnan').要指定另一个缩放,请使用'规模'名称值对参数。
'mahalanobis' Mahalanobis距离,使用正定的协方差矩阵计算C.的默认值C是样本协方差矩阵X,如图所示X (X, omitrows).指定不同的值C, 使用'COV'名称值对参数。
'城市街区' 城市街区距离。
'minkowski' Minkowski距离。默认指数是2.要指定不同的指数,请使用'P'名称值对参数。
'chebbychev' Chebychev距离(最大坐标差异)。
'余弦' 一个减去观察结果之间的包含角度的余弦(作为载体处理)。
“相关” 一个减去观察之间的样本线性相关性(作为值序列处理)。
'汉明' 汉明距离,坐标的百分比不同。
'jaccard' 一个减去Jaccard系数,非零坐标的百分比不同。
“矛曼” 一个减去样本Spearman的观察之间的秩相关性(视为值序列)。
@DISTFUN

自定义距离功能句柄。距离功能具有表单

功能d2 = distfun(zi,zj)%计算距离......
在哪里

  • Zi.是一个1-by-N矢量包含一排X或者y.

  • ZJ.是一个m——- - - - - -N包含多行的矩阵X或者y.

  • D2是一个m距离的-乘1向量D2(j)是观察之间的距离Zi.zj(j,:).

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

例子:'距离','minkowski'

用于Minkowski距离度量的指数,指定为逗号分隔对组成'P'和正标量。此参数仅在此处有效'距离''minkowski'.

例子:'P',4

数据类型:单身的|双倍的

用于Mahalanobis距离度量的协方差矩阵,指定为逗号分隔对组成'COV'和一个积极的矩阵。此参数仅在何时有效'距离''mahalanobis'.

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

数据类型:单身的|双倍的

标准化欧几里德距离度量的比例参数值,指定为逗号分隔对组成'规模'和一个非负载体。规模长度等于列数X.行之间的每个坐标差异X并且由相应的元素缩放查询点规模.此参数仅在何时有效'距离''seuclidean'.

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

数据类型:单身的|双倍的

的叶节点的最大数据点数K.D-Tree,指定为逗号分隔对组成'桶里'和一个正整数标量。此参数仅在何时有效nsmethod.'kdtree'.

例子:'桶装',20

数据类型:单身的|双倍的

标志根据距离对返回的指数进行排序,指定为逗号分隔对'sortindices'和任何一种真的1) 或者错误的0.)。

为了更快的性能y包含许多有许多最接近点的观察结果X,你可以设置sortindices.错误的.在这种情况下,rangesearch.以特定的顺序返回最近点的指数。什么时候sortindices.真的,该函数按距离按升序排列最近点的索引。

例子:'sortindices',false

数据类型:逻辑

输出参数

全部收缩

最近点的指数,作为数字向量的单元阵列返回。

idx.是一个我的——- - - - - -1单元格阵列,其中我的是行的数量y.矢量IDX {J}包含点(行)的指数X谁的距离y(j,:)不大于R..如果sortindices.真的, 然后rangesearch.按距离按升序排列索引。

最近点到查询点的距离,作为数字向量的单元阵列返回。

D.是一个我的——- - - - - -1单元格阵列,其中我的是行的数量y.d {j}包含之间的距离值y(j,:)和点(行)X (Idx {j},:).如果sortindices.真的, 然后rangesearch.按升序排列距离。

提示

  • 对于固定的正实实际价值R.rangesearch.找到所有的X在一定距离内的点R.每个y观点。找到K.要点X离每个人最近y点,用于固定的正整数K., 使用knnsearch..

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

算法

替代功能

如果你设置了rangesearch.功能“NSMethod”将名称-值对参数设置为适当的值('彻底的'用于穷举搜索算法或'kdtree'为一个K.D-Tree算法),然后搜索结果等同于通过使用距离搜索获得的结果rangesearch.对象功能。不像rangesearch.功能,函数rangesearch.对象功能需要一个ExhaustiveSearcher或者kdtreesearcher.模型对象。

扩展能力

在R2011B中介绍