2016-09-10 2 views
-1

das ist mein erstes Mal alles etwas, also bitte nett! Ich studiere einen Code über einen Random-Walker-Algorithmus und bin mit der Verwendung von Sparse verloren gegangen, um die spärliche Laplace-Matrix eines Punkt- und Kantensatzes zu erstellen. Ich plane, meinen eigenen Code der spärlichen Funktion zu machen, aber ich habe Probleme zu verstehen, wie es funktioniert und die Ausgabe davon, so dass jede Hilfe perfekt wäre.Matlab's spärliche Funktion Erklärung

Danke euch allen!

+0

MATLAB Integrierte Hilfe und Dokumentation sollten Ihnen hier helfen. Die Eingabe von 'help sparse' oder' doc sparse' erklärt und gibt Beispiele. In Ihrer Situation wird ein 'lookfor laplacian' die Laplace-Funktion enthüllen, die für Sie nützlich sein sollte. –

Antwort

2

Eine spärliche Matrix ist eine spezielle Art von "Matrix" in Matlab, die konzeptionell einer normalen Matrix entspricht, aber unter der Haube anders funktioniert.

Sie werden "spärlich" genannt, weil sie normalerweise in Situationen verwendet werden, in denen man erwarten würde, dass die meisten Elemente der Matrix Nullen und nur einige Elemente ungleich Null enthalten. Der Vorteil der Verwendung dieses speziellen Objekttyps besteht darin, dass der Speicher, der zum Erstellen eines solchen Objekts benötigt wird, in erster Linie von der Anzahl der enthaltenen Nicht-Null-Elemente und nicht von der Größe der "tatsächlichen" Matrix abhängig ist.

Im Gegensatz dazu benötigt eine normale (vollständige) Matrix Speicher, der relativ zu seiner Größe zugewiesen ist. So wird zum Beispiel eine 1000x1000 Matrix von Zahlen (so genannte "Doppelgänger") ungefähr 8MB Bytes zum Speichern benötigen (1 Million Elemente bei 8 Bytes pro "Doppel"), selbst wenn alle Elemente Null sind. Beachten Sie:

>> a = zeros(1000,1000); 
>> b = sparse(1000,1000); 
>> whos 
    Name   Size    Bytes Class  Attributes 

    a   1000x1000   8000000 double    
    b   1000x1000    8024 double sparse  

nun einen Wert zuweisen zu jedem von ihnen bei Indizes (1,1) und sehen, was passiert:

>> a(1,1) = 1 % without a semicolon, this will flood your screen with zeros 
>> b(1,1) = 1 
b = 
    (1,1)  1 

Wie Sie sehen können, nur die spärliche Matrix Spur von Null verschiedenen hält Werte, und die Nullen sind "impliziert".
Jetzt können einige weitere Elemente hinzu:

>> a(1:100,1:100) = 1; 
>> b(1:100,1:100) = 1; 
>> whos 
    Name   Size    Bytes Class  Attributes 

    a   1000x1000   8000000 double    
    b   1000x1000    168008 double sparse 

Wie Sie sehen können, hat sich der zugewiesene Speicher für a nicht geändert, weil die Größe der gesamten Anordnung nicht verändert hat. Während für b, weil es jetzt mehr Werte ungleich Null enthält, nimmt es mehr Speicherplatz in Arbeitsspeicher.

Im Allgemeinen sollten die meisten dünnbesetzten Matrizen mit den gleichen Operationen wie normale Matrizen arbeiten; Der Grund dafür ist, dass die meisten "normalen" Funktionen explizit so definiert sind, dass sie auch dünn besetzte Matrizen akzeptieren, aber sie unter der Haube unterschiedlich behandeln (dh sie versuchen, zum selben Ergebnis zu kommen, aber intern einen anderen Ansatz dafür zu verwenden) ist besser geeignet, Matrizen zu spärlich zu machen). zB:

>> c = sum(a(:)) 
c = 
     10000 

>> d = sum(b(:)) 
d = 
    (1,1)  1000000 

Sie können ‚convert‘ eine vollständige Matrix direkt zu einem spärlich man mit dem sparse Befehl, und eine spärliche Matrix zurück zu einer „vollen“ Matrix mit dem full Befehl:

>> sparse(c) 
ans = 
    (1,1)   10000 

>> full(d) 
ans = 
    1000000