3

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

 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,因为与同一节点的距离为零。

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

4

2 回答 2

0

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

E = Edm + diag(Inf(1,size(Edm,1)));
A = bsxfun(@eq, E, min(E));
于 2013-10-13T17:46:11.043 回答
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, (如未连接),您也必须考虑到这一点。

于 2013-10-13T20:44:51.397 回答