Erstellen Sie eine Adjazenzmatrix in MATLAB

Betrachten eine Reihe von Punkten angeordnet, die auf einem raster der Größe N-M.
Ich bin versucht zu bauen, die Nähe matrix, so dass
benachbarte Punkte miteinander verbunden sind.

Beispielsweise in einem 3x3-raster mit einem Diagramm:

1-2-3
| | |
4-5-6
| | |
7-8-9

Sollten wir die entsprechende Nachbarschaft-matrix:

+---+------------------------------------------------------+
|   |   1     2     3     4     5     6     7     8     9  |
+---+------------------------------------------------------+
| 1 |   0     1     0     1     0     0     0     0     0  |
| 2 |   1     0     1     0     1     0     0     0     0  |
| 3 |   0     1     0     0     0     1     0     0     0  |
| 4 |   1     0     0     0     1     0     1     0     0  |
| 5 |   0     1     0     1     0     1     0     1     0  |
| 6 |   0     0     1     0     1     0     0     0     1  |
| 7 |   0     0     0     1     0     0     0     1     0  |
| 8 |   0     0     0     0     1     0     1     0     1  |
| 9 |   0     0     0     0     0     1     0     1     0  |
+---+------------------------------------------------------+

Als bonus, sollte die Lösung funktionieren sowohl für 4 - und 8-verbunden sind die benachbarten Punkte, das ist:

   o             o  o  o
o  X  o   vs.    o  X  o
   o             o  o  o

Dieser den code, den ich bisher:

N = 3; M = 3;
adj = zeros(N*M);

for i=1:N
    for j=1:M
        k = sub2ind([N M],i,j);
        if i>1
            ii=i-1; jj=j;
            adj(k,sub2ind([N M],ii,jj)) = 1; 
        end
        if i<N
            ii=i+1; jj=j;
            adj(k,sub2ind([N M],ii,jj)) = 1; 
        end
        if j>1
            ii=i; jj=j-1;
            adj(k,sub2ind([N M],ii,jj)) = 1; 
        end
        if j<M
            ii=i; jj=j+1;
            adj(k,sub2ind([N M],ii,jj)) = 1; 
        end
    end
end

Wie kann dieser verbessert werden, um zu vermeiden, all die Schleife?

Kommentar zu dem Problem
Nein, das ist keine Hausaufgabe. Mein Ziel ist es Plotten Sie diese Punkte und Linien zeichnen zwischen verbundenen Punkte als graph. Das interessante an der Sache ist, dass diese Punkte nicht zu bleiben, die sich auf dem grid.. Kommentarautor: Dave

InformationsquelleAutor der Frage Dave | 2010-07-18

Schreibe einen Kommentar