我想知道如何从我之前创建的欧几里德距离矩阵创建邻接矩阵。 例如:
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
检索一个与最近邻居相邻的邻接矩阵吗?
答案 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
,(如未连接),您也必须考虑到这一点。