Matlab中给出的欧几里德距离矩阵的邻接矩阵

时间:2013-10-13 16:23:40

标签: matlab matrix

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

 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 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我没有得到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,(如未连接),您也必须考虑到这一点。