pdist
两两之间的距离对观测
语法
描述
使用指定的方法返回的距离D
= pdist (X
,距离
,DistParameter
)距离
和DistParameter
。您可以指定DistParameter
只有当距离
是“seuclidean”
,闵可夫斯基的
,或“mahalanobis”
。
D = pdist (
或X
,距离
CacheSize =缓存
)D = pdist (
使用一个缓存的大小X
,距离
,DistParameter
CacheSize =缓存
)缓存
兆字节加速欧几里得距离的计算。这种说法只适用于当距离
是“fasteuclidean”
,“fastsquaredeuclidean”
,或“fastseuclidean”
。
例子
计算欧氏距离和距离向量转换为矩阵
计算之间的欧氏距离对观测,使用距离矢量转换为一个矩阵squareform
。
创建一个矩阵和三个观察和两个变量。
rng (“默认”)%的再现性X =兰德(3 2);
计算欧氏距离。
D = pdist (X)
D =1×30.2954 1.0670 0.9448
成对的距离排列的顺序(2,1),(1),(2)。你可以很容易地定位观测之间的距离我
和j
通过使用squareform
。
Z = squareform (D)
Z =3×30 0 0.2954 1.0670 0.2954 0.9448 1.0670 0.9448 0
squareform
返回一个对称矩阵Z (i, j)
对应于两两之间的距离观察我
和j
。例如,您可以找到观察2和3之间的距离。
Z (2、3)
ans = 0.9448
通过Z
到squareform
复制的输出函数pdist
函数。
y = squareform (Z)
y =1×30.2954 1.0670 0.9448
输出y
从squareform
和D
从pdist
都是一样的。
计算闵可夫斯基距离
创建一个矩阵和三个观察和两个变量。
rng (“默认”)%的再现性X =兰德(3 2);
使用默认计算闵可夫斯基距离指数2。
D1 = pdist (X,闵可夫斯基的)
D1 =1×30.2954 1.0670 0.9448
计算闵可夫斯基距离指数为1,等于该街区距离。
D2 = pdist (X,闵可夫斯基的,1)
D2 =1×30.3721 1.5036 1.3136
D3 = pdist (X,“cityblock”)
D3 =1×30.3721 1.5036 1.3136
计算两两距离缺失的元素使用一个自定义距离函数
定义一个自定义距离函数忽略了坐标南
值,计算两两距离通过使用自定义距离函数。
创建一个矩阵和三个观察和两个变量。
rng (“默认”)%的再现性X =兰德(3 2);
假设第一次观察到的第一个元素是失踪。
X(1,1) =南;
计算欧氏距离。
D1 = pdist (X)
D1 =1×3南南0.9448
如果观察我
或j
包含南
值,函数pdist
返回南
两两之间的距离我
和j
。因此,D1(1)和D1(2),两两距离(2,1)和(3,1)南
值。
定义一个自定义距离函数naneucdist
忽略了坐标,南
值并返回欧几里得距离。
函数D2 = naneucdist (XI, XJ)% NANEUCDIST欧几里得距离忽略坐标nann =大小(XI, 2);sqdx = (xi xj) ^ 2;nstar =总和(~ isnan (sqdx), 2);%的配对数量不包含nannstar (nstar = = 0) =南;%返回NaN如果所有对包括NaND2squared =总和(sqdx 2“omitnan”)。* n / nstar;%失踪坐标校正D2 =√D2squared);
计算距离naneucdist
通过传递函数的句柄作为输入参数pdist
。
D2 = pdist (X, @naneucdist)
D2 =1×30.3974 1.1538 0.9448
加快欧氏距离计算使用fasteuclidean
距离
创建一个大矩阵的点,然后测量所使用的时间pdist
使用默认”欧几里得”
距离度量。
rng默认的%的再现性N = 10000;X = randn (N, 1000);D = pdist (X);%热身函数更可靠的计时信息抽搐D = pdist (X);标准= toc
标准= 12.2091
接下来,使用的测量时间pdist
与“fasteuclidean”
距离度量。指定一个缓存大小为10。
D = pdist (X,“fasteuclidean”,CacheSize = 10);%热身函数抽搐D2 = pdist (X,“fasteuclidean”,CacheSize = 10);加速= toc
加速= 1.3007
评估有多少倍的加速计算比较标准。
标准/加速
ans = 9.3863
加速版本对于这个例子计算快三倍。
输入参数
X
- - - - - -输入数据
数字矩阵
输入数据,指定为一个数字矩阵的大小米——- - - - - -n。行对应于个人观察,列对应单个变量。
数据类型:单
|双
距离
- - - - - -距离度量
特征向量|字符串标量|函数处理
距离度量,指定为一个特征向量,字符串标量,或函数处理,如下表所述。
价值 | 描述 |
---|---|
“欧几里得” |
欧氏距离(默认) |
“squaredeuclidean” |
平方欧氏距离。(此选项仅供效率。它不满足三角不等式)。 |
“seuclidean” |
标准化的欧氏距离。每个坐标差异观察是通过除以相应的扩展元素的标准差, |
“fasteuclidean” |
欧氏距离计算通过使用另一种算法,节省了时间预测的数量至少是10。在某些情况下,这种快速算法可以降低精度。算法开始“快” 不支持稀疏数据金宝app。有关详细信息,请参见算法。 |
“fastsquaredeuclidean” |
平方欧氏距离计算通过使用另一种算法,节省了时间预测的数量至少是10。在某些情况下,这种快速算法可以降低精度。算法开始“快” 不支持稀疏数据金宝app。有关详细信息,请参见算法。 |
“fastseuclidean” |
标准化的欧氏距离计算通过使用另一种算法,节省了时间预测的数量至少是10。在某些情况下,这种快速算法可以降低精度。算法开始“快” 不支持稀疏数据金宝app。有关详细信息,请参见算法。 |
“mahalanobis” |
Mahalanobis距离,计算使用的样本协方差 |
“cityblock” |
城市街区的距离 |
闵可夫斯基的 |
闵可夫斯基距离。默认的指数是2。使用 |
“chebychev” |
Chebychev距离(最大坐标差异) |
的余弦 |
1 -之间的夹角的余弦值点(视为向量) |
“相关” |
1 -样本点之间的相关性(视为序列值) |
“汉明” |
汉明距离,协调不同的百分比 |
“jaccard” |
1 - Jaccard系数,非零坐标不同的百分比 |
“枪兵” |
1 -样本之间的斯皮尔曼等级相关的观察(视为序列值) |
@ |
自定义距离函数处理。距离函数的形式 函数ZJ D2 = distfun(子)%计算距离…
如果你的数据不是稀疏的,你可以通过使用一个内置的通常更快的计算距离的距离度量,而不是一个函数处理。 |
定义,请参阅距离度量。
当你使用“seuclidean”
,闵可夫斯基的
,或“mahalanobis”
,您可以指定一个额外的输入参数DistParameter
控制这些指标。你也可以以同样的方式使用这些指标作为默认值的其他指标DistParameter
。
例子:闵可夫斯基的
数据类型:字符
|字符串
|function_handle
DistParameter
- - - - - -距离度量参数值
积极的标量|数值向量|数字矩阵
距离度量参数值,指定为一个积极的标量,数值向量,或数字矩阵。这个论证是有效的只有当你指定距离
作为“seuclidean”
,闵可夫斯基的
,或“mahalanobis”
。
如果
距离
是“seuclidean”
,DistParameter
为每个维度是一个向量扩展因素,指定为一个积极的向量。默认值是性病(X, omitnan)
。如果
距离
是闵可夫斯基的
,DistParameter
的指数是闵可夫斯基距离,指定为一个积极的标量。默认值是2。如果
距离
是“mahalanobis”
,DistParameter
协方差矩阵,指定为一个数字矩阵。默认值是X (X, omitrows)
。DistParameter
必须是对称的,正定。
例子:闵可夫斯基,3
数据类型:单
|双
缓存
- - - - - -克以兆字节为单位矩阵的大小
1 e3
(默认)|积极的标量|“最大”
克以兆字节为单位矩阵的大小,作为一个积极的标量或指定“最大”
。的pdist
函数可以使用CacheSize =缓存
只有当距离
参数是“fasteuclidean”
,“fastsquaredeuclidean”
,或“fastseuclidean”
。
如果缓存
是“最大”
,pdist
整个中间矩阵试图分配足够的内存的大小米
——- - - - - -米
,在那里米
是输入数据的行数X
。缓存大小不需要大到足以让整个中间矩阵,但必须至少足够容纳一个米
1的向量。否则,pdist
使用的标准算法计算欧氏距离。
如果论点的距离“fasteuclidean”
,“fastsquaredeuclidean”
,或“fastseuclidean”
和缓存
太大或价值“最大”
,pdist
可能会超过可用内存的分配格拉姆矩阵。在这种情况下,MATLAB®一个错误的问题。
例子:“最大”
数据类型:双
|字符
|字符串
输出参数
D
——两两距离
数字行向量
两两距离,作为数字返回行向量的长度米(米1)/ 2,相应的对观测,米观察的数量吗X
。
距离的顺序排列(2,1),(3,1),…,(米1),(2),…,(米,2),…,(米,米1),即,the lower-left triangle of the米——- - - - - -米距离矩阵的列顺序。两两之间的距离观察我和j是在D((张)* (m i / 2) + j-i)为我≤j。
您可以转换D
对称矩阵的使用squareform
函数。Z = squareform (D)
返回一个米——- - - - - -米矩阵Z (i, j)
对应于两两之间的距离观察我和j。
如果观察我或j包含南
年代,那么相应的价值D
是南
内置的距离函数。
D
通常被用作不同矩阵在集群或多维标度。有关详细信息,请参见分层聚类和函数参考页cmdscale
,cophenet
,链接
,mdscale
,optimalleaforder
。这些功能需要D
作为输入参数。
更多关于
距离度量
距离度量是一个函数,定义了两个观测之间的距离。pdist
金宝app支持各种距离度量:欧氏距离、标准化的欧氏距离,Mahalanobis距离,街区距离,闵可夫斯基距离,Chebychev距离,余弦距离、相关距离,汉明距离、Jaccard距离,和枪兵的距离。
给定一个米——- - - - - -n数据矩阵X
,这被视为米(1 -n)行向量x1,x2、……x米,各种向量之间的距离x年代和xt定义如下:
欧氏距离
的欧几里得距离是一个特例闵可夫斯基距离,p= 2。
标准化的欧几里得距离
在哪里V是n——- - - - - -n对角矩阵的jth对角元素是(年代(j))2,在那里年代是一个向量的每个维度的比例因素。
Mahalanobis距离
在哪里C协方差矩阵。
城市街区的距离
城市街区的距离是一个特例的闵可夫斯基距离,p= 1。
闵可夫斯基距离
的特殊情况p= 1闵可夫斯基距离给出了城市街区距离。的特殊情况p= 2闵可夫斯基距离给出了欧氏距离。的特殊情况p=∞闵可夫斯基距离给Chebychev距离。
Chebychev距离
距离Chebychev闵可夫斯基距离是一个特例,在哪里p=∞。
余弦距离
相关距离
在哪里
和 。
汉明距离
Jaccard距离
斯皮尔曼的距离
在哪里
rsj的排名是xsj接管x1j,x2j,……x乔丹所计算的
tiedrank
。r年代和rt的坐标态等级向量x年代和xt,也就是说,r年代= (r年代1,r年代2,……rsn)。
。
。
算法
快速欧几里得距离算法
的值距离
观点:开始快
(如“fasteuclidean”
和“fastseuclidean”
)计算欧几里得距离使用一个算法使用额外的内存来节省计算时间。这个算法被命名为“欧几里得距离矩阵技巧”Albanie[1]和其他地方。内部测试表明该算法节省时间当预测的数量至少是10。
找到所有的点之间的距离矩阵Dx我和xj,每个x我有n变量,计算距离的算法中使用最后一行以下方程:
矩阵 在最后一行的方程叫做格拉姆矩阵。计算距离平方的速度更快,但略低于数值稳定,当你计算和使用格拉姆矩阵而不是计算的距离平方平方求和。讨论,看到Albanie[1]。
储存格拉姆矩阵、软件使用缓存的默认大小1 e3
兆字节。你可以设置缓存大小使用缓存
论点。如果该值的缓存
太大或“最大”
,pdist
可能会超过可用内存的分配格拉姆矩阵。在这种情况下,MATLAB一个错误的问题。
引用
[1]Albanie,撒母耳。欧氏距离矩阵技巧。2019年6月。可以在https://www.robots.ox.ac.uk/%7Ealbanie/notes/Euclidean_distance_trick.pdf。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
使用笔记和限制:
输入参数的距离值(
距离
)必须是一个编译时常量。例如,使用闵可夫斯基距离,包括coder.Constant(闵可夫斯基)
在arg游戏
的价值codegen
。输入参数的距离值(
距离
不能自定义距离函数)。pdist
不支持代码生成快速金宝app欧氏距离计算,这意味着那些距离度量的名字呢快
(例如,“fasteuclidean”
)。生成的代码的
pdist
使用parfor
(MATLAB编码器)创建循环,支持共享内存多核平台上并行运行生成的代码。金宝app如果你的编译器不支持开放的多处理(OpenMP)应用金宝app程序接口或禁用OpenMP库,MATLAB编码器™将parfor
循环,为
循环。找到支持的编译器金宝app,看看金宝app支持编译器。禁用OpenMP图书馆,设置EnableOpenMP
配置对象的属性假
。有关详细信息,请参见coder.CodeConfig
(MATLAB编码器)。
GPU的代码生成
生成NVIDIA的CUDA®代码®GPU使用GPU编码器™。
使用笔记和限制:
距离支持金宝app输入参数值(
距离
)优化的CUDA代码“欧几里得”
,“squaredeuclidean”
,“seuclidean”
,“cityblock”
,闵可夫斯基的
,“chebychev”
,的余弦
,“相关”
,“汉明”
,“jaccard”
。距离
不能自定义距离函数。距离
必须是一个编译时常量。
GPU数组
加速代码运行在一个图形处理单元(GPU)使用并行计算工具箱™。
版本历史
之前介绍过的R2006aMATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。