n维空间中的距离

时间:2017-03-01 14:16:12

标签: arrays matlab optimization multidimensional-array

我有一个5x100矩阵,其中每行代表一个特定点,每列是5维空间中该点的坐标。这意味着总共有100分。

如何计算每个点之间的距离,以便找到彼此最接近的5个点?

我为二维空间做了那个

dist=sqrt(bsxfun(@minus,o(1,:),o(1,:)').^2+bsxfun(@minus,o(2,:),o(2,:)').^2)
sorted=sort(dist,1, 'ascend')
fin=sorted(1:5,:)
summ=sum(fin)
[M,I]=min(summ)
sol=dist(:,I)
[Bsort Bidx]=getNElements(sol,5)
oTemp=o(:,[Bidx])

但是当谈到多维问题时,我找不到有效的解决方案。

谢谢。

2 个答案:

答案 0 :(得分:1)

似乎你想要每个点之间的欧几里德距离。有一个名为pdist的内置MATLAB函数,它应该完全符合您的需要。通过聋,它需要一个矩阵M,观察对应于与列对应的行和变量,因此为了您的目的,您应该转置输入矩阵。

M = rand(5,100);
D = pdist(M','euclidean');

输出D将是矢量。如果需要(对称)矩阵形式,可以使用squareform

Dmat = squareform(D);

因此Dmat(i,j)将是点M(:,i)M(:,j)之间的欧氏距离。

然后,要查找5个最小元素,您可以对Dmat的线性表示进行排序,取前5个索引,然后使用ind2sub获取i s和{{ 1}}你正在寻找:

j

答案 1 :(得分:0)

sqrt(sum(bsxfun(@minus,reshape(m,100,1,5),reshape(m,1,100,5)).^2,3))如果矩阵被称为m,则在5维中称为100x5矩阵,应该这样做。

如果你在MATLAB R2016b或更高版本中,你甚至可以使用:sqrt(sum((reshape(m',100,1,5)-reshape(m',1,100,5)).^2,3))