How to generate a sparse matrix for a given array?

1 visualización (últimos 30 días)
Benson Gou
Benson Gou el 24 de Mayo de 2021
Comentada: Benson Gou el 25 de Mayo de 2021
Dear All,
I want to generate a sparse matrix B for a given array A. A contains two columns of indecis. For example,
A = [1 3;
1 4;
2 3;
2 5;
3 5;
4 5]
The sparse matrix B should be as follows:
B = [ 2 0 -1 -1 0;
0 2 -1 0 -1;
-1 -1 2 0 0;
-1 0 0 2 -1;
0 -1 -1 -1 3]
The characteristics of B:
  1. Sum of each row is zero.
  2. If we consider matrix A gives the information of edges of a graph, B(i,i) = sum of number of edges, B(i,j) = -1 if there is an edge between i and j.
Thanks a lot.
Benson

Respuesta aceptada

Matt J
Matt J el 25 de Mayo de 2021
Editada: Matt J el 25 de Mayo de 2021
B=laplacian( graph(A(:,1),A(:,2)) );
  5 comentarios
Benson Gou
Benson Gou el 25 de Mayo de 2021
yes, it works well. Thanks a lot.
Benson
Matt J
Matt J el 25 de Mayo de 2021
You're welcome, but please Accept-click the answer that you deem best resolves your question.

Iniciar sesión para comentar.

Más respuestas (1)

the cyclist
the cyclist el 24 de Mayo de 2021
Here is one way:
A = [1 3;
1 4;
2 3;
2 5;
3 5;
4 5];
d = max(A(:));
B = sparse(A(:,1),A(:,2),-1,d,d) + sparse(A(:,2),A(:,1),-1,d,d);
for ii = 1:d
B(ii,ii) = -sum(B(ii,:));
end
disp(B)
(1,1) 2 (3,1) -1 (4,1) -1 (2,2) 2 (3,2) -1 (5,2) -1 (1,3) -1 (2,3) -1 (3,3) 3 (5,3) -1 (1,4) -1 (4,4) 2 (5,4) -1 (2,5) -1 (3,5) -1 (4,5) -1 (5,5) 3
  7 comentarios
the cyclist
the cyclist el 25 de Mayo de 2021
I assume that doing what @Matt J suggested in his answer:
A=unique(sort(A,2),'rows')
is what you would need to do here as well.
If you posted a small example that exhibits the problem, it would help. But I'm guessing you have your answer.
Benson Gou
Benson Gou el 25 de Mayo de 2021
Hi, the Cyclist,
Thanks a lot for your great help. You have a good day!
Benson

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by