matlab - Accumarray 邻接矩阵混淆?
matlab - Accumarray Adjacency Matrix Confusion?
所以我正在尝试创建一个邻接矩阵,但我对 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]
我知道 "matrix+1" 有一个额外的零行和一列,但我不明白你为什么要那样做。当我查找它时,根据 this post 我应该使用 "matrix+1",而我得到的最好的解释是 "because indexing in matlab starts at 1"。
我完全不明白...如果我尝试创建邻接矩阵,哪种方法是正确的?任何帮助将不胜感激,谢谢!
如果您的节点 ID 为 0 索引,则需要 +1,否则不需要。所以你需要问的问题是,你的节点ID是0索引还是1索引?
您的矩阵是否接受多个链接?如果是,那么上面accumarray
的两个结果都不正确,因为节点1和3连接了2次。
顺便说一句,你可以考虑 sparse
和 full
:
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))
其实就是一个权重向量
所以我正在尝试创建一个邻接矩阵,但我对 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]
我知道 "matrix+1" 有一个额外的零行和一列,但我不明白你为什么要那样做。当我查找它时,根据 this post 我应该使用 "matrix+1",而我得到的最好的解释是 "because indexing in matlab starts at 1"。
我完全不明白...如果我尝试创建邻接矩阵,哪种方法是正确的?任何帮助将不胜感激,谢谢!
如果您的节点 ID 为 0 索引,则需要 +1,否则不需要。所以你需要问的问题是,你的节点ID是0索引还是1索引?
您的矩阵是否接受多个链接?如果是,那么上面accumarray
的两个结果都不正确,因为节点1和3连接了2次。
顺便说一句,你可以考虑 sparse
和 full
:
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))
其实就是一个权重向量