【问题标题】:matlab - Accumarray Adjacency Matrix Confusion?matlab - Accumarray 邻接矩阵混淆?
【发布时间】:2015-07-31 20:41:40
【问题描述】:

所以我试图创建一个邻接矩阵,我对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 开始”。

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

【问题讨论】:

    标签: matlab matrix adjacency-matrix accumarray


    【解决方案1】:

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

    【讨论】:

    • 哦,我的 nodeID 是从 1 开始索引的,所以我认为 accumarray(matrix,1) 应该是正确的,谢谢!
    【解决方案2】:

    您的矩阵是否接受多个链接?如果是,那么上面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))实际上是一个权重向量。

    【讨论】:

    • 感谢您指出多个链接,但是当我只调用 adMatrix1 = accumarray(matrix,1); 而没有 adMatrix1=adMatrix1~=0; 时,我确实得到了一个包含多个链接的邻接矩阵,我只是不希望最终矩阵中显示的那些.另外,感谢fullsparseones的解释!
    • 哦不好意思,没注意逻辑命令,刚看到结果呵呵
    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2015-07-25
    • 2020-07-09
    相关资源
    最近更新 更多