以最小距离匹配两个点

时间:2017-06-06 08:47:26

标签: algorithm matlab distance k-means minimum

我正在解决这个问题:

有一个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)尝试过,我得到坐标成对的距离,但我不能将它们匹配在一起..

如何解决这个问题,任何想法?

2 个答案:

答案 0 :(得分:0)

您应该使用pdist2代替pdist

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

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

  

D = pdist2(X,Y)返回包含欧几里德距离的矩阵D.   在mx-by-n数据矩阵X和中的每对观察之间   my-by-n数据矩阵Y. X和Y的行对应于观察,   列对应于变量。 D是一个mx-by-my矩阵,带有   (i,j)条目等于X和中观察i之间的距离   观察j在Y.

所以,你应该按如下方式使用它:

D = pdist2(C1, C2);

注1:如果您找到的功能几乎可以达到您的要求(即pdist),那么查看本手册的See Also部分通常很有用并检查其中一个是否有用。

答案 1 :(得分:0)

您应该更准确地定义什么是“匹配”:它应该是1对1还是1对多?

如果它是1对多(C1的几个质心可以与C2的相同质心匹配)那么使用最近邻居可以帮助see knnsearch

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

对于比赛的绘图,它实际上取决于数据的性质。 但是一种方便的方法是将PCA从3D转换为2D,然后简单地在质心之间绘制线条。