File: edges_to_adj.m

package info (click to toggle)
suitesparse 1%3A5.8.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 152,716 kB
  • sloc: ansic: 774,385; cpp: 24,213; makefile: 6,310; fortran: 1,927; java: 1,826; csh: 1,686; ruby: 725; sh: 535; perl: 225; python: 209; sed: 164; awk: 60
file content (31 lines) | stat: -rw-r--r-- 850 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function C = edges_to_adj (E)
%EDGES_TO_ADJ create an adjacency matrix from an edge incidence matrix
%
% usage: C = edges_to_adj (E)
%
% Each column of E is an edge (i,j) where E([i j],:) = 1,
% Each column must have exactly two or zero entries.
%
% C is a symmetric binary matrix with no self edges.

% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2020, All Rights Reserved.
% http://suitesparse.com   See GraphBLAS/Doc/License.txt for license.

% check input E
[i j x] = find (E) ;
if (any (x ~= 1))
    error ('invalid incidence matrix: not binary') ;
end
d = full (sum (E)) ;
if (~all ((d == 2) | (d == 0)))
    error ('invalid incidence matrix: column degree') ;
end

% convert each edge into a clique of size 2, and sum up the cliques
C = spones (E*E') ;

% remove the diagonal
C = C - diag (diag (C)) ;
% C = tril (C,-1) + triu (C,1) ;