【问题标题】:matching two points with minimum distance匹配最小距离的两个点
【发布时间】:2017-11-07 04:46:18
【问题描述】:

我正在解决这个问题:

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

如何解决这个问题,有什么想法吗?

【问题讨论】:

    标签: algorithm matlab distance k-means minimum


    【解决方案1】:

    您应该使用pdist2 而不是pdist

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

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

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

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

    D = pdist2(C1, C2);
    

    注意 1: 如果您找到了一个几乎可以满足您的需求的功能(即pdist),查看手册的See Also 部分并检查是否有通常很有用其中一些可能会有所帮助。

    【讨论】:

      【解决方案2】:

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

      如果它是一对多(C1 的多个质心可以与 C2 的同一个质心匹配),那么使用最近邻会有所帮助,see knnsearch

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多