1

所以我试图创建一个邻接矩阵,我对 和 之间的区别感到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”,有一个额外的行和零列,但我不明白你为什么要那样做。当我查找它时,根据这篇文章,我应该使用“matrix+1”,对此我得到的最好解释是“因为 matlab 中的索引从 1 开始”。

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

4

2 回答 2

3

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

于 2015-05-19T20:46:41.203 回答
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))实际上是一个权重向量。

于 2015-05-19T21:04:08.370 回答