Ich habe das folgende Problem: Ich brauche viele Teilmengen einer großen Matrix. Eigentlich brauche ich nur Ansichten als Eingabe für eine andere Funktion f(), also muss ich die Werte nicht ändern. Es scheint jedoch, dass R für diese Aufgabe schrecklich langsam ist oder ich etwas falsch mache (was eher wahrscheinlich erscheint). Das Spielzeugbeispiel zeigt, wie viel Zeit es dauert, nur die Spalten auszuwählen und sie dann in einer anderen Funktion zu verwenden (in diesem Spielzeugbeispiel die primitive Funktion sum()). Als "Benchmark" teste ich auch die Rechenzeit gegen die Zusammenfassung der gesamten Matrix, die überraschend schneller ist. Ich experimentierte auch mit dem Paket Ref, konnte jedoch keinen Leistungszuwachs erzielen. Die Schlüsselfrage ist also, wie man die Matrix unterteilen kann, ohne sie zu kopieren? Ich freue mich über jede Hilfe, Danke!Schnelle Unterteilung einer Matrix in R
library(microbenchmark)
library(ref)
m0 <- matrix(rnorm(10^6), 10^3, 10^3)
r0 <- refdata(m0)
microbenchmark(m0[, 1:900], sum(m0[, 1:900]), sum(r0[,1:900]), sum(m0))
Unit: milliseconds expr min lq mean median uq m0[, 1:900] 10.087403 12.350751 16.697078 18.307475 19.054157 sum(m0[, 1:900]) 11.067583 13.341860 17.286514 19.123748 19.990661 sum(r0[, 1:900]) 11.066164 13.194244 16.869551 19.204434 20.004034 sum(m0) 1.015247 1.040574 1.059872 1.049513 1.067142 max neval 58.238217 100 25.664729 100 23.505308 100 1.233617 100
Die Benchmark-Aufgabe, die gesamte Matrix Summieren nimmt 1,059872 Millisekunden und ist etwa 16-mal schneller als die anderen Funktionen.
ich eine Fehlermeldung erhalten, wenn Ich versuche dein Beispiel: 'Fehler in r0 [, 1: 900]: falsche Anzahl von Dimensionen' – 5th
' Bibliothek ('ref') 'behebt es – dvantwisk
OK also, was ist die Kriterien hier für eine Lösung? Muss es einfach schneller sein als das, was Sie gerade tun, oder müsste es schneller sein als die gesamte Matrix zu summieren? –