我有一个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])
但是当谈到多维问题时,我找不到有效的解决方案。
谢谢。
答案 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))
。