以最小距离匹配两点

matching two points with minimum distance

我正在解决这个问题:

有一个3d二进制矩阵,我在matlab中用kmeans算法聚类;

之后我得到一个值C,它包含数组中这些簇的质心坐标,例如:

 C=   30.0000   15.0000   48.5000   

      100.2676   57.7382   80.7489

      57.5000   85.0000   35.0000

      27.5000   50.0000   69.5000

(4 个质心:第一个坐标为 (30,15,48,5)) 其中行代表每个质心的 x,yz 坐标。

当我聚类另一个矩阵时,我得到第二个值,它也包含第二个质心的坐标。 现在我必须匹配来自具有最小距离的第一和第二聚类的质心,并创建一个输出,我可以在其中看到哪些质心属于一起。

我已经用 pdist(X) 试过了,我得到了成对的坐标距离,但我无法将它们匹配在一起..

如何解决这个问题?

你应该使用 pdist2 instead of pdist.

pdist2 计算两组观察值之间的成对距离,而 pdist 计算单个矩阵中所有观察值之间的成对距离。

pdist2的文档指定了输出距离矩阵的正确语法和含义:

D = pdist2(X,Y) returns a matrix D containing the Euclidean distances between each pair of observations in the mx-by-n data matrix X and my-by-n data matrix Y. Rows of X and Y correspond to observations, columns correspond to variables. D is an mx-by-my matrix, with the (i,j) entry equal to distance between observation i in X and observation j in Y.

因此,您应该按如下方式使用它:

D = pdist2(C1, C2);

注 1: 如果您找到了一个功能几乎可以满足您的需求(即 pdist),那么查看 See Also 部分并检查其中一项是否有帮助。

你应该更准确地定义什么是"matching":应该是一对一还是一对多?

如果是一对多(C1 的多个质心可以匹配到 C2 的同一个质心),那么使用最近邻可以提供帮助,see knnsearch

如果它是 1 对 1,那么你必须使用一些贪心算法首先映射最近的质心(循环 pdist2 的结果)。

至于比赛的绘制,这实际上取决于数据的性质。 但是一种方便的方法是进行 PCA 从 3D 到 2D,然后简单地绘制质心之间的线。