Effizient replizieren Matrizen in R

Ich habe eine matrix und suchen nach einer effizienten Art und Weise zu replizieren, n-mal (wobei n die Anzahl der Beobachtungen im Datensatz). Zum Beispiel, wenn ich eine matrix A

A <- matrix(1:15, nrow=3)

dann will ich eine Ausgabe der form

rbind(A, A, A, ...) #n times.

Offensichtlich gibt es viele Möglichkeiten, zu konstruieren, eine so große matrix, zum Beispiel mit Hilfe eines for Schleife oder apply oder ähnliche Funktionen. Jedoch der Aufruf an die "matrix-replication-Funktion" findet in der Kern meiner Optimierungs-Algorithmus, wo es heißt Zehntausende von malen während einer Ausführung meines Programms. Daher, Schleifen anwenden-Typ-Funktionen und ähnliches, sind nicht effizient genug. (Eine solche Lösung würde im Grunde bedeuten, dass ein loop über n wird durchgeführt, Zehntausende von Zeiten, das ist natürlich ineffizient.) Ich habe bereits versucht, den normalen rep Funktion, aber noch nicht einen Weg gefunden, wie ordnen Sie die Leistung von rep in eine matrix der gewünschten Form.

Die Lösung
do.call("rbind", replicate(n, A, simplify=F))
ist auch zu ineffizient, weil rbind ist zu oft verwendet in diesem Fall. (Dann werden etwa 30% der gesamten Laufzeit meines Programms aufgewendet wird, die rbinds.)

Weiß jemand eine bessere Lösung?

rbind ist nur einmal benutzt in der do.call Weg. es ist die Replikation, die wahrscheinlich bogging it down.
Getestet habe ich es mit Rprofund rbind dauerte etwa doppelt so viel Zeit wie replicate. Ich war auch überrascht.

InformationsquelleAutor Wolfgang Pößnecker | 2012-10-23

Schreibe einen Kommentar