matlab - Accumarray邻接矩阵混淆?

时间:2015-05-19 20:24:51

标签: matlab matrix adjacency-matrix accumarray

所以我试图创建一个邻接矩阵,我对accumarray(matrix+1,1)accumarray(matrix,1)之间的区别感到困惑。

我做了:

matrix = [ 1 3 
           4 2 
           1 3 
           3 1]

adMatrix1 = accumarray(matrix,1);
adMatrix1=adMatrix1~=0; 
adMatrix1 = [0 0 1  
             0 0 0  
             1 0 0  
             0 1 0]

然后:

adMatrix2 = accumarray(matrix+1,1); 
adMatrix2=adMatrix2~=0;
adMatrix2 = [0 0 0 0 
             0 0 0 1
             0 0 0 0 
             0 1 0 0 
             0 0 1 0]

我知道使用"矩阵+ 1",有一个额外的行和列零,但我不明白为什么你会这样做办法。当我查阅它时,根据this帖子,我应该使用" matrix + 1",我得到的最佳解释是"因为matlab中的索引从1开始#34 ;.

我根本不明白......如果我想创建一个邻接矩阵,哪种方法是正确的?任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:3)

如果您的节点ID为0索引,则需要+1,否则不需要。所以您需要问的问题是,您的节点ID是索引还是1索引?

答案 1 :(得分:1)

您的矩阵是否接受多个链接?如果是,则上述accumarray的结果都不正确,因为节点1和3连接了2次。

顺便说一下,您可以考虑sparsefull

full(sparse(matrix(:,1), matrix(:,2), ones(1, size(matrix, 1))))

ans =

 0     0     2
 0     0     0
 1     0     0
 0     1     0

ones(1, size(matrix, 1))实际上是一个重量矢量。