Matlab - Путаница в матрице смежности 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» есть дополнительная строка и столбец с нулями, но я не понимаю, почему вы так делаете. Когда я искал его, согласно этому сообщению, я должен использовать "matrix+1 ", и лучшее объяснение, которое я получил для этого, было то, что "потому что индексация в Matlab начинается с 1".

Я вообще этого не понимаю... если бы я пытался создать матрицу смежности, какой способ был бы правильным? Любая помощь будет принята с благодарностью, спасибо!


person ocean800    schedule 19.05.2015    source источник


Ответы (2)


Если ваши идентификаторы узлов проиндексированы 0, вам нужен +1, иначе вы этого не сделаете. Итак, вопрос, который вам нужно задать, заключается в том, индексируются ли ваши идентификаторы узлов 0 или 1?

person hiandbaii    schedule 19.05.2015
comment
О, мои идентификаторы узлов индексируются, начиная с 1, поэтому я думаю, что accumarray(matrix,1) должен быть правильным, спасибо! - person ocean800; 19.05.2015

Ваша матрица принимает несколько ссылок? Если да, то оба результата с 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)) на самом деле является вектором веса.

person scmg    schedule 19.05.2015
comment
спасибо за указание нескольких ссылок, но когда я вызываю только adMatrix1 = accumarray(matrix,1); без adMatrix1=adMatrix1~=0;, я получаю матрицу смежности с несколькими ссылками, я просто не хочу, чтобы они отображались в окончательной матрице. Также спасибо за объяснение full, sparse и ones! - person ocean800; 20.05.2015
comment
о, извините, я не заметил логическую команду, просто увидел результаты, хе-хе - person scmg; 20.05.2015