[R] Speeding up "accumulation" code in large matrix calc?
robertfeldt
robert.feldt at gmail.com
Sat Feb 25 05:47:54 CET 2012
Wow! Thanks to both Petr and Berend for this extensive help.
I learned a lot not only about this specific case but about R in general
from studying your answers.
The compiled version t4 seems to give the most consistently quickest results
and for my case (about 6000 rows and 500 columns with a probability of the
sought for outcome 0.04) I see speedups from my original of 30-40 times. See
below for details.
Excellent help thank you!
# t1-t4 as above in thread and then compiled to t1.c-t4.c ...
random_matrix <- function(nrows, ncols, probabilityOfOne) {
matrix((runif(nrows*ncols)<probabilityOfOne)+0, nrow=nrows);
}
library(benchmark)
compare.exec.times <- function(A) {
benchmark(t1(A,outcome=1),
t2(A,outcome=1),
t3(A,outcome=1),
t4(A,outcome=1),
t1.c(A,outcome=1),
t2.c(A,outcome=1),
t3.c(A,outcome=1),
t4.c(A,outcome=1),
columns=c("test", "user.self", "relative"),
replications=3)
}
compare.exec.times(random_matrix(100, 1000, 0.10)) # t4.c quickest, 47 times
speedup
compare.exec.times(random_matrix(1000, 100, 0.10)) # t4.c quickest, 25 times
speedup
compare.exec.times(random_matrix(1000, 1000, 0.10)) # t4.c quickest, 37
times speedup
# Most realistic for my data:
compare.exec.times(random_matrix(6000, 400, 0.04)) # t4.c quickest, 30
times speedup
test user.self relative
1 t1(A, outcome = 1) 35.372 30.145038
5 t1.c(A, outcome = 1) 8.591 7.329092
2 t2(A, outcome = 1) 14.598 12.761662
6 t2.c(A, outcome = 1) 14.413 12.587786
3 t3(A, outcome = 1) 1.579 1.743851
7 t3.c(A, outcome = 1) 1.608 1.818490
4 t4(A, outcome = 1) 1.092 1.120441
8 t4.c(A, outcome = 1) 0.894 1.000000
--
View this message in context: http://r.789695.n4.nabble.com/Speeding-up-accumulation-code-in-large-matrix-calc-tp4417911p4419422.html
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list