Fügt alle möglichen Diagonalen einer n * n Matrix oder eines Datenrahmens ein

8

Ich versuche, alle möglichen Zeichen einzufügen, die in einer beliebigen Diagonalen innerhalb einer N * N-Matrix angeordnet sind.

Betrachten Sie zum Beispiel die folgende 3 x 3-Matrix:

%Vor%

In der obigen Matrix muss ich die Diagonalen einfügen: "see", "fey", "ees" und "yef". Ich kann diese im Datenrahmen mit dem folgenden Code finden:

%Vor%

Das Problem ist, dass ich das automatisieren möchte, damit es auf jeder N x N-Matrix funktioniert. (Ich schreibe eine Funktion, um die Diagonalen in jeder N X N-Matrix zu finden). Gibt es einen effizienten Weg, dies zu tun?

    
schristel 04.05.2015, 14:11
quelle

4 Antworten

10

Oh, das ist einfach, wenn Sie Matrix anstelle von data.frame verwenden :) Wir können Matrixelemente genauso wie Vektorelemente auswählen:

%Vor%

So können wir jetzt das verwenden:

%Vor%

Und wenn Sie es rückwärts wollen, kehren Sie einfach den Vektor der Indizes mit rev function:

um %Vor%

Einige Benchmarks:

%Vor%     
bartektartanus 04.05.2015, 14:23
quelle
3

Für eine Matrix kann dies erreicht werden, indem die diag der vier möglichen Rotationen genommen werden. Wenn Sie eine Rotationsfunktion wie folgt einrichten ( Guthaben ), wird dies einfach:

%Vor%

Wie von Frank in Kommentaren hervorgehoben, könnte dies bei ausreichend großen Matrizen langsam werden (auf meiner Maschine beginnt rotate länger als etwa eine Sekunde bei Matrizen größer als 1000 X 1000). Sie können etwas Zeit sparen, indem Sie rev vor dem Einfügen verwenden, zB:

%Vor%     
Joe 04.05.2015 14:19
quelle
3

Eine Möglichkeit ist die Verwendung von diag in der Matrix, hier mat genannt, um Konflikte mit dem Funktionsnamen zu vermeiden und die Reihen- und / oder Spaltenreihenfolge für jede Diagonale und Richtung umzukehren.

Sie können es mit einer zusätzlichen Funktion tun, um die Umkehrungen systematisch zu machen, so dass Sie sapply zum Schleifen verwenden können.

%Vor%     
James 04.05.2015 14:49
quelle
3

Konvertiere matrix in eine tatsächliche Matrix m (im Gegensatz zu einem Datenrahmen). Dann sind die vier Diagonalen:

%Vor%     
G. Grothendieck 04.05.2015 15:31
quelle

Tags und Links