【问题标题】:Adjacency matrix from Euclidean distance matrix given in matlabmatlab中给出的欧几里得距离矩阵的邻接矩阵
【发布时间】:2013-10-21 06:19:02
【问题描述】:

我想知道如何从我之前创建的欧几里德距离矩阵创建邻接矩阵。 例如:

 Edm =  [0       7.7466  7.7534  0       3.7296  2.8171;
         7.7466  0       0.0068  7.7466  4.0170  4.9295;
         7.7534  0.0068  0       7.7534  4.0239  4.9364;
         0       7.7466  7.7534  0       3.7296  2.8171;
         3.7296  4.0170  4.0239  3.7296  0       0.9125;
         2.8171  4.9295  4.9364  2.8171  0.9125  0     ]

Edm 根据彼此之间的欧几里德距离显示连通性节点 1-6。对角线必须为 0,因为与同一节点的距离为零。

有没有办法让我从上面的Edm 检索具有 2 个最近邻的邻接矩阵?

【问题讨论】:

  • 节点 6 有一个特殊情况 - 节点 1 和 4 具有相同的距离,并且都可能是第二近邻。这种情况应该如何处理?

标签: matlab matrix


【解决方案1】:

我没有得到 Mohsen 的回答,所以这是我的(更麻烦的)建议:

sz = size(Edm,1);
n = 2;             % Number of desired smallest distances
E = Edm + diag(Inf(1,sz));
[~, mm] = sort(E);

mmi = mm(1:n,:)';  % n smallest distances (in your example, n = 2)

Edm_idx = sparse(mmi(:),repmat(1:sz,1,n),1,sz,sz);

Adj = full(Edm.*Edm_idx);

Edm 中的非对角值并不是0。如果这些假设是Inf,(如未连接),您也必须考虑到这一点。

【讨论】:

    【解决方案2】:

    将对角线设置为Inf 并使用bsxfun 将每列中的元素与该列中的最小值进行比较:

    E = Edm + diag(Inf(1,size(Edm,1)));
    A = bsxfun(@eq, E, min(E));
    

    【讨论】:

    • 你确定这行得通吗?当我测试它时结果是错误的。 (我没有得到对称邻接矩阵)
    • @RobertP。我确实得到了一个对称的。 AA' 有什么不同?
    • 在我看来,它只是在每列中找到最小值(零除外)。我收到sum(A) = [1 1 1 .. ],你呢?
    • 这是预期的。这是因为在该示例中,没有一个点具有多个最近邻。
    猜你喜欢
    • 2014-11-18
    • 2014-06-08
    • 2021-04-23
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2020-06-16
    相关资源
    最近更新 更多