如果你注意到,你创建的邻接矩阵有一个不同的模式。具体来说,它们是对称的和
banded.你可以利用这个事实,使用
DIAG函数(或
SPDIAGS函数,如果你想做一个稀疏矩阵)轻松创建你的矩阵。下面是如何为每种情况创建邻接矩阵,使用上面的示例矩阵作为示例:
4连接的邻居
mat = [1 2 3; 4 5 6; 7 8 9]; %# Sample matrix
[r,c] = size(mat); %# Get the matrix size
diagVec1 = repmat([ones(c-1,1); 0],r,1); %# Make the first diagonal vector
%# (for horizontal connections)
diagVec1 = diagVec1(1:end-1); %# Remove the last value
diagVec2 = ones(c*(r-1),1); %# Make the second diagonal vector
%# (for vertical connections)
adj = diag(diagVec1,1)+... %# Add the diagonals to a zero matrix
diag(diagVec2,c);
adj = adj+adj.'; %'# Add the matrix to a transposed
%# copy of itself to make it
%# symmetric
你会得到以下矩阵:
adj =
0 1 0 1 0 0 0 0 0
<