Most Efficient zum Erstellen einer symmetrischen Matrix

8

Ich habe folgende Matrix / Datenrahmen:

%Vor%

In diesem Fall ist N = 5 (Anzahl der Zeilen = Anzahl der Spalten). Ich möchte die fehlenden Werte in dieser symmetrischen Matrix (e [1,2] = e [2,1] usw.) ausfüllen. Gibt es einen möglichst effizienten Weg, die fehlenden Werte (N die Matrixgröße in meinem Fall ziemlich groß) auszufüllen? Gibt es einen besseren Weg als verschachtelte Schleifen?

    
Avi 24.09.2015, 20:06
quelle

4 Antworten

6

Nur zur Fertigstellung möchte ich diese Technik zeigen. Die Addition der Transponierung wird nicht funktionieren, wenn der untere Teil der Matrix (unter der Diagonalen) Werte enthält, die sie zum oberen Teil der Matrix hinzufügen.

Mit dem Matrix-Paket können wir eine spärliche Matrix erzeugen, die im Falle der Erzeugung der Symmetrie einer großen Matrix viel weniger Speicher benötigt und sie sogar beschleunigt.

Um eine symmetrische dünn besetzte Matrix aus der Matrix e zu erstellen, würden wir tun:

%Vor%

Ausgabe:

%Vor%

Mikrobenmark:

Nehmen wir eine Funktion, um eine symmetrische Matrix aus einer Matrix zu machen (kopiert standardmäßig den oberen Teil der Matrix in den unteren):

%Vor%

Und testen:

%Vor%

Wie Sie sehen können, ist symmetrise tatsächlich viel langsamer als e + t(e) oder df[lower.tri(df)] <- t(df)[lower.tri(df)] , aber zumindest haben Sie eine Funktion, die automatisch eine Matrix symmetriert (nimmt den oberen Teil und erstellt standardmäßig den niedrigeren) und falls Sie Haben Sie eine große Matrix, wo Speicher ein Problem ist, könnte dies nützlich sein.

P.S. Wo immer Sie . in der Matrix sehen, ist dies eine Null. Durch die Verwendung eines anderen Systems ist eine dünn besetzte Matrix eine Art "komprimiertes" Objekt, das die Speichereffizienz erhöht.

    
LyzandeR 24.09.2015, 20:26
quelle
6

Auch für die Geschwindigkeit:

%Vor%

Hier ist ein Maßstab:

%Vor%

Es kann diese Geschwindigkeit erhalten, weil es direkt eine symmetrische Matrix erzeugt.

    
Neal Fultz 24.09.2015 22:31
quelle
5
%Vor%

Ausgabe:

%Vor%

Daten:

%Vor%     
mpalanco 24.09.2015 20:11
quelle
4
%Vor%

Fügen Sie die Matrix und die Transponierte dieser Matrix hinzu, ist das was Sie wollen?

    
CarlAH 24.09.2015 20:12
quelle

Tags und Links