Matrizen in R effizient vergleichen

8

Ich habe ein Array a mit einigen Matrizen darin. Jetzt muss ich effizient prüfen, wie viele verschiedene Matrizen ich habe und welche Indizes (in aufsteigender Reihenfolge) sie im Array haben. Ich gehe folgendermaßen vor: Fügen Sie die Spalten der Matrizen als Zeichenvektoren ein und betrachten Sie die Häufigkeitstabelle wie folgt:

%Vor%

Wenn Sie jedoch n auf große Zahlen erhöhen, wird dies sehr ineffizient (es wird hauptsächlich paste() langsamer und langsamer). Hat jemand eine bessere Lösung?

Hier ist ein "realer" Datensatz mit 100 Beobachtungen, wobei einige Matrizen tatsächliche Duplikate sind (im Gegensatz zu meinem obigen Beispiel): Ссылка

Vielen Dank.

    
Mr. Zen 11.12.2017, 13:50
quelle

3 Antworten

9

Da Ihre tatsächlichen Daten aus den ganzen Zahlen 0,1,2,3 bestehen, warum nutzen Sie nicht base 4 ? Ganzzahlen sind viel schneller zu vergleichen als ganze Matrixobjekte. (Alle Vorkommen von " a " sind die Daten, die in dem echten Datensatz über den Link gefunden wurden.)

%Vor%

Und da es sich um Effizienz handelt, lassen Sie uns einen Benchmark geben:

%Vor%

Der Ansatz von @ d.b. macht nicht wirklich dasselbe wie die beiden vorherigen Ansätze (es identifiziert einfach und entfernt keine Duplikate).

%Vor%

Allerdings dominiert weiterhin Base4Approach :

%Vor%


Aktualisierung mit freundlicher Genehmigung von @alexis_laz

Wie in den Kommentaren von @alexis_laz erwähnt, können wir viel besser machen.

%Vor%     
Joseph Wood 11.12.2017, 14:24
quelle
3

Mein erster Versuch war eigentlich sehr langsam. Also hier ist eine leicht veränderte Version von dir:

%Vor%     
Martin Schmelzer 11.12.2017 14:23
quelle
2

Ich weiß nicht, ob das genau das ist, was Sie wollen, aber hier können Sie Indizes extrahieren, bei denen die Matrizen gleich sind. Mehr Verarbeitung kann notwendig sein, um zu bekommen, was Sie wollen

%Vor%     
d.b 11.12.2017 14:24
quelle

Tags und Links