主要内容

rangesearch

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

描述

Idx= RangeSearch(XyR.发现所有的X距离内的点R.y要点。行的行Xy对应于观察值,列对应于变量。

例子

[IdxD.]=范围搜索(XyR.也返回距离之间的距离y点和X距离内的点R.

例子

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

例子

全部崩溃

找到X在欧几里得距离内的点1.5y点。这两个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){}{25[92]}{[93 42 31 73 60 28 78 83 48 89 85]}{41[92]}{[44 7 28 78 75 42 69 31 83 93] 26}{[15 31 89 41 27日17日29日60 34]}{[89]}{1 x0双}{1 x0双}{1 x0双}
d =10×1单元阵列{[0.9546 1.0987 1.2730 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.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,dist,'sortindices',假);x=x(1,:);最近点=X(Idx{1},:);

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

nonNearestIdx = true(大小(X, 1), 1);nonNearestIdx (Idx {1}) = false;散射(X (nonNearestIdx, 1), X (nonNearestIdx 2))在…上散射(regicalPoints(:,1),regientPoints(:,2))散射(x(1),x(2),“黑”'填充')持有

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

在医院里找到病人患者患者在特定年龄和体重范围内的数据集y

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

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

创建一个自定义距离函数迪斯芬这决定了患者之间的年龄和体重距离迪斯芬在美国,两个年龄相差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×239 164

输入参数

全部崩溃

输入数据,指定为mx-借-N数字矩阵,其中每行代表一个N-维度点。列数N必须等于中的列数y

数据类型:|

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

数据类型:|

每个查询点周围的搜索半径,指定为非负标量。rangesearch找到所有X距离内的点(行)R.y点。距离的意义取决于“距离”名称值对参数。

数据类型:|

名称 - 值参数

指定可选的逗号分离对名称,价值论据。的名字是参数名称和价值是对应的值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:名称1,值1,…,名称,值

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

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

价值 描述
'kdtree'

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

  • 'chebbychev'

  • “城市街区”

  • “欧几里得”

  • “明可夫斯基”

“详尽” 使用穷举搜索算法。软件计算从所有X指向每个y指向最近的邻居。

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

例子:“NSMethod”,“穷举”

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

价值 描述
“欧几里得” 欧几里德距离。
“seuclidean” 标准化的欧几里德距离。行之间的每个坐标差异X查询点通过除以从中计算的标准偏差的对应元素进行缩放Xstd(x,'omitnan').要指定另一个缩放,请使用“规模”名称值对参数。
“mahalanobis” 马氏距离,使用正定协方差矩阵计算C。的默认值C是样本协方差矩阵X,如图所示cov(X,“省略行”).指定不同的值C, 使用“浸”名称值对参数。
“城市街区” 城市街区的距离。
“明可夫斯基” Minkowski距离。默认指数是2.要指定不同的指数,请使用'P'名称值对参数。
'chebbychev' Chebychev距离(最大坐标差异)。
'余弦' 一减去观测值之间夹角的余弦(视为向量)。
“相关性” 一个减去观察之间的样本线性相关性(作为值序列处理)。
'汉明' 汉明距离,坐标差的百分比。
“jaccard” 1减去Jaccard系数,即不同的非零坐标的百分比。
“枪兵” 一个减去样本Spearman的观察之间的秩相关性(视为值序列)。
@迪斯芬

自定义距离函数句柄。距离函数的形式为

作用D2=距离(ZI,ZJ)%计算距离...
在哪里

  • 是一个1-by-N矢量包含一排Xy

  • ZJ是一个m-借-N的多行矩阵Xy

  • D2是一个m-距离的x-1矢量,以及D2(j)是观测值之间的距离ZJ (j,:)

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

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

Minkowski距离度量的指数,指定为逗号分隔对,由'P'一个正标量。此参数仅当“距离”“明可夫斯基”

例子:'P',4

数据类型:|

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

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

数据类型:|

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

例子:“比例”,iqr(X)

数据类型:|

服务器的叶节点中的最大数据点数K.D-Tree,指定为逗号分隔对组成“BucketSize”和一个正整数标量。此参数仅在以下情况下有效:NSMethod'kdtree'

例子:'桶装',20

数据类型:|

根据距离对返回的索引进行排序的标志,指定为逗号分隔对,由'sortindices'或者符合事实的1)或错误的0.).

为了更快的性能y包含多个观测值,这些观测值中有多个最近的点X,您可以设置分类错误的.在这种情况下,rangesearch以特定的顺序返回最近点的指数。什么时候分类符合事实的,该函数按距离升序排列最近点的索引。

例子:“SortIndices”,错

数据类型:逻辑

输出参数

全部崩溃

最近点的索引,作为数值向量的单元数组返回。

Idx是一个我的-借-1单元阵列,我的是中的行数y.矢量IDX {J}包含点(行)的指数X谁的距离Y(j,:)不大于R..如果分类符合事实的, 然后rangesearch按距离升序排列索引。

最近点到查询点的距离,作为数值向量的单元格数组返回。

D.是一个我的-借-1单元阵列,我的是中的行数yd {j}包含之间的距离值Y(j,:)和中的点(行)X(Idx{j},:).如果分类符合事实的, 然后rangesearch按升序排列距离。

提示

  • 对于固定的正实值R.rangesearch发现所有的X距离内的点R.y指向找到K.要点X离它们最近的y点,对于一个固定的正整数K.使用knnsearch.

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

算法

替代功能

如果你设置rangesearch作用“NSMethod”将名称-值对参数设置为适当的值(“详尽”对于穷举搜索算法或'kdtree'对于一个K.d-树算法),然后将搜索结果等价于使用rangesearch对象的功能。不像rangesearch函数,rangesearch对象功能需要一个穷举搜索器KDTreeSearcher模型对象。

扩展功能

在R2011b中引入