colProds() and rowProds() benchmarks on subsetted computation
This report benchmark the performance of colProds() and rowProds() on subsetted computation.
Data
> rmatrix <- function(nrow, ncol, mode = c("logical", "double", "integer", "index"), range = c(-100,
+ +100), na_prob = 0) {
+ mode <- match.arg(mode)
+ n <- nrow * ncol
+ if (mode == "logical") {
+ x <- sample(c(FALSE, TRUE), size = n, replace = TRUE)
+ } else if (mode == "index") {
+ x <- seq_len(n)
+ mode <- "integer"
+ } else {
+ x <- runif(n, min = range[1], max = range[2])
+ }
+ storage.mode(x) <- mode
+ if (na_prob > 0)
+ x[sample(n, size = na_prob * n)] <- NA
+ dim(x) <- c(nrow, ncol)
+ x
+ }
> rmatrices <- function(scale = 10, seed = 1, ...) {
+ set.seed(seed)
+ data <- list()
+ data[[1]] <- rmatrix(nrow = scale * 1, ncol = scale * 1, ...)
+ data[[2]] <- rmatrix(nrow = scale * 10, ncol = scale * 10, ...)
+ data[[3]] <- rmatrix(nrow = scale * 100, ncol = scale * 1, ...)
+ data[[4]] <- t(data[[3]])
+ data[[5]] <- rmatrix(nrow = scale * 10, ncol = scale * 100, ...)
+ data[[6]] <- t(data[[5]])
+ names(data) <- sapply(data, FUN = function(x) paste(dim(x), collapse = "x"))
+ data
+ }
> data <- rmatrices(mode = "double")
Results
10x10 matrix
> X <- data[["10x10"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE),
+ `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X,
+ rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X,
+ rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows,
+ cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows,
+ cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE),
+ `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X,
+ rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X,
+ rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols,
+ rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols,
+ rows], method = "expSumLog", na.rm = FALSE), unit = "ms")
Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
0.012254 |
0.0131940 |
0.0137512 |
0.0136505 |
0.0141040 |
0.028068 |
3 |
colProds(X, rows, cols) w/ direct |
0.013598 |
0.0144145 |
0.0150910 |
0.0148880 |
0.0153830 |
0.023777 |
5 |
colProds(X[rows, cols]) w/ direct |
0.013447 |
0.0143615 |
0.0172449 |
0.0149640 |
0.0153810 |
0.244130 |
2 |
colProds_X_S w/ expSumLog |
0.018376 |
0.0195765 |
0.0201663 |
0.0202670 |
0.0206985 |
0.025475 |
4 |
colProds(X, rows, cols) w/ expSumLog |
0.019651 |
0.0210560 |
0.0218898 |
0.0216270 |
0.0220575 |
0.037553 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
0.019694 |
0.0206145 |
0.0219075 |
0.0216335 |
0.0220385 |
0.073779 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
3 |
colProds(X, rows, cols) w/ direct |
1.109679 |
1.092504 |
1.097426 |
1.090656 |
1.090683 |
0.8471213 |
5 |
colProds(X[rows, cols]) w/ direct |
1.097356 |
1.088487 |
1.254066 |
1.096224 |
1.090542 |
8.6978053 |
2 |
colProds_X_S w/ expSumLog |
1.499592 |
1.483743 |
1.466509 |
1.484708 |
1.467562 |
0.9076172 |
4 |
colProds(X, rows, cols) w/ expSumLog |
1.603640 |
1.595877 |
1.591843 |
1.584338 |
1.563918 |
1.3379293 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
1.607149 |
1.562415 |
1.593128 |
1.584814 |
1.562571 |
2.6285806 |
Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 10x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
0.011913 |
0.0129585 |
0.0134311 |
0.0134660 |
0.0138490 |
0.016012 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.012962 |
0.0139420 |
0.0149132 |
0.0145025 |
0.0151025 |
0.030446 |
3 |
rowProds(X, cols, rows) w/ direct |
0.013233 |
0.0141825 |
0.0147567 |
0.0149220 |
0.0152895 |
0.018000 |
2 |
rowProds_X_S w/ expSumLog |
0.017616 |
0.0191310 |
0.0197504 |
0.0198535 |
0.0203420 |
0.026931 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
0.018928 |
0.0203500 |
0.0209340 |
0.0210600 |
0.0216765 |
0.022522 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
0.018844 |
0.0203900 |
0.0237887 |
0.0213275 |
0.0218280 |
0.261822 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
5 |
rowProds(X[cols, rows]) w/ direct |
1.088055 |
1.075896 |
1.110345 |
1.076972 |
1.090512 |
1.901449 |
3 |
rowProds(X, cols, rows) w/ direct |
1.110803 |
1.094455 |
1.098699 |
1.108124 |
1.104015 |
1.124157 |
2 |
rowProds_X_S w/ expSumLog |
1.478721 |
1.476328 |
1.470496 |
1.474343 |
1.468843 |
1.681926 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
1.588853 |
1.570398 |
1.558620 |
1.563939 |
1.565203 |
1.406570 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
1.581801 |
1.573485 |
1.771162 |
1.583804 |
1.576143 |
16.351611 |
Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 10x10 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 10x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowProds_X_S w/ direct |
11.913 |
12.9585 |
13.43111 |
13.4660 |
13.849 |
16.012 |
1 |
colProds_X_S w/ direct |
12.254 |
13.1940 |
13.75122 |
13.6505 |
14.104 |
28.068 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1 |
colProds_X_S w/ direct |
1.028624 |
1.018173 |
1.023834 |
1.013701 |
1.018413 |
1.752935 |
Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x100 matrix
> X <- data[["100x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE),
+ `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X,
+ rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X,
+ rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows,
+ cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows,
+ cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE),
+ `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X,
+ rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X,
+ rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols,
+ rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols,
+ rows], method = "expSumLog", na.rm = FALSE), unit = "ms")
Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
0.075356 |
0.084892 |
0.0912111 |
0.0873035 |
0.0955310 |
0.170171 |
5 |
colProds(X[rows, cols]) w/ direct |
0.085624 |
0.094628 |
0.1028437 |
0.0997975 |
0.1070510 |
0.178916 |
3 |
colProds(X, rows, cols) w/ direct |
0.085629 |
0.094897 |
0.1033043 |
0.1000820 |
0.1070860 |
0.154112 |
2 |
colProds_X_S w/ expSumLog |
0.218350 |
0.242647 |
0.2648198 |
0.2560175 |
0.2707250 |
0.408534 |
4 |
colProds(X, rows, cols) w/ expSumLog |
0.229622 |
0.249282 |
0.2704413 |
0.2660840 |
0.2758485 |
0.393942 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
0.228696 |
0.249759 |
0.2738163 |
0.2682205 |
0.2874275 |
0.388222 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
5 |
colProds(X[rows, cols]) w/ direct |
1.136260 |
1.114687 |
1.127535 |
1.143110 |
1.120589 |
1.0513895 |
3 |
colProds(X, rows, cols) w/ direct |
1.136326 |
1.117856 |
1.132586 |
1.146369 |
1.120955 |
0.9056302 |
2 |
colProds_X_S w/ expSumLog |
2.897579 |
2.858302 |
2.903374 |
2.932500 |
2.833897 |
2.4007263 |
4 |
colProds(X, rows, cols) w/ expSumLog |
3.047163 |
2.936460 |
2.965006 |
3.047804 |
2.887529 |
2.3149773 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
3.034874 |
2.942079 |
3.002008 |
3.072277 |
3.008735 |
2.2813640 |
Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 100x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
0.088727 |
0.0973980 |
0.1051866 |
0.1027635 |
0.1091840 |
0.157889 |
3 |
rowProds(X, cols, rows) w/ direct |
0.099244 |
0.1074520 |
0.1146477 |
0.1123365 |
0.1168475 |
0.197033 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.100435 |
0.1103505 |
0.1180430 |
0.1158650 |
0.1208215 |
0.172637 |
2 |
rowProds_X_S w/ expSumLog |
0.233665 |
0.2601110 |
0.2832733 |
0.2727490 |
0.2879940 |
0.441902 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
0.242296 |
0.2695425 |
0.2881091 |
0.2842380 |
0.2969920 |
0.408022 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
0.243808 |
0.2691680 |
0.2878549 |
0.2845320 |
0.2935565 |
0.443428 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
3 |
rowProds(X, cols, rows) w/ direct |
1.118532 |
1.103226 |
1.089946 |
1.093156 |
1.070189 |
1.247921 |
5 |
rowProds(X[cols, rows]) w/ direct |
1.131955 |
1.132985 |
1.122225 |
1.127492 |
1.106586 |
1.093407 |
2 |
rowProds_X_S w/ expSumLog |
2.633528 |
2.670599 |
2.693056 |
2.654143 |
2.637694 |
2.798814 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
2.730803 |
2.767434 |
2.739030 |
2.765943 |
2.720105 |
2.584233 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
2.747844 |
2.763589 |
2.736613 |
2.768804 |
2.688640 |
2.808479 |
Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 100x100 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 100x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
75.356 |
84.892 |
91.21106 |
87.3035 |
95.531 |
170.171 |
2 |
rowProds_X_S w/ direct |
88.727 |
97.398 |
105.18656 |
102.7635 |
109.184 |
157.889 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
rowProds_X_S w/ direct |
1.177438 |
1.147317 |
1.153222 |
1.177083 |
1.142917 |
0.9278255 |
Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x10 matrix
> X <- data[["1000x10"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE),
+ `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X,
+ rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X,
+ rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows,
+ cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows,
+ cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE),
+ `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X,
+ rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X,
+ rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols,
+ rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols,
+ rows], method = "expSumLog", na.rm = FALSE), unit = "ms")
Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
0.028526 |
0.0308240 |
0.0360477 |
0.0355155 |
0.0382975 |
0.052117 |
5 |
colProds(X[rows, cols]) w/ direct |
0.039119 |
0.0415805 |
0.0480739 |
0.0453655 |
0.0524895 |
0.075894 |
3 |
colProds(X, rows, cols) w/ direct |
0.039761 |
0.0426775 |
0.0499539 |
0.0499970 |
0.0526570 |
0.080116 |
2 |
colProds_X_S w/ expSumLog |
0.138421 |
0.1477160 |
0.1655872 |
0.1563490 |
0.1759780 |
0.234236 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
0.149783 |
0.1591435 |
0.1806083 |
0.1698540 |
0.1959150 |
0.302452 |
4 |
colProds(X, rows, cols) w/ expSumLog |
0.150513 |
0.1602845 |
0.1831992 |
0.1822420 |
0.1964585 |
0.246771 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
5 |
colProds(X[rows, cols]) w/ direct |
1.371345 |
1.348965 |
1.333621 |
1.277344 |
1.370572 |
1.456223 |
3 |
colProds(X, rows, cols) w/ direct |
1.393851 |
1.384554 |
1.385772 |
1.407752 |
1.374946 |
1.537233 |
2 |
colProds_X_S w/ expSumLog |
4.852450 |
4.792240 |
4.593559 |
4.402275 |
4.595026 |
4.494426 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
5.250754 |
5.162974 |
5.010261 |
4.782532 |
5.115608 |
5.803327 |
4 |
colProds(X, rows, cols) w/ expSumLog |
5.276344 |
5.199990 |
5.082135 |
5.131337 |
5.129800 |
4.734942 |
Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 1000x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
0.041530 |
0.0440780 |
0.0501652 |
0.0464435 |
0.0537505 |
0.070249 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.053872 |
0.0578740 |
0.0650592 |
0.0627805 |
0.0709960 |
0.090010 |
3 |
rowProds(X, cols, rows) w/ direct |
0.053912 |
0.0589770 |
0.0660756 |
0.0647760 |
0.0695765 |
0.094357 |
2 |
rowProds_X_S w/ expSumLog |
0.153034 |
0.1656715 |
0.1876841 |
0.1822315 |
0.1993470 |
0.290609 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
0.164987 |
0.1755245 |
0.1970204 |
0.1838890 |
0.2130140 |
0.296501 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
0.165902 |
0.1765130 |
0.2007746 |
0.1866730 |
0.2179445 |
0.275991 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
5 |
rowProds(X[cols, rows]) w/ direct |
1.297183 |
1.312991 |
1.296898 |
1.351761 |
1.320844 |
1.281299 |
3 |
rowProds(X, cols, rows) w/ direct |
1.298146 |
1.338014 |
1.317158 |
1.394727 |
1.294434 |
1.343179 |
2 |
rowProds_X_S w/ expSumLog |
3.684903 |
3.758598 |
3.741317 |
3.923725 |
3.708747 |
4.136842 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
3.972719 |
3.982134 |
3.927428 |
3.959413 |
3.963014 |
4.220715 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
3.994751 |
4.004560 |
4.002266 |
4.019357 |
4.054744 |
3.928753 |
Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 1000x10 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 1000x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
28.526 |
30.824 |
36.04769 |
35.5155 |
38.2975 |
52.117 |
2 |
rowProds_X_S w/ direct |
41.530 |
44.078 |
50.16525 |
46.4435 |
53.7505 |
70.249 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.00000 |
1.000000 |
1.000000 |
1.000000 |
1.00000 |
2 |
rowProds_X_S w/ direct |
1.455865 |
1.42999 |
1.391636 |
1.307697 |
1.403499 |
1.34791 |
Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

10x1000 matrix
> X <- data[["10x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE),
+ `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X,
+ rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X,
+ rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows,
+ cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows,
+ cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE),
+ `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X,
+ rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X,
+ rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols,
+ rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols,
+ rows], method = "expSumLog", na.rm = FALSE), unit = "ms")
Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
0.525756 |
0.6323360 |
0.6559065 |
0.6511925 |
0.6745010 |
0.896585 |
5 |
colProds(X[rows, cols]) w/ direct |
0.557986 |
0.6459375 |
0.7152804 |
0.6643885 |
0.6815345 |
5.973052 |
3 |
colProds(X, rows, cols) w/ direct |
0.556517 |
0.6539165 |
0.6759455 |
0.6697385 |
0.6930740 |
0.898400 |
2 |
colProds_X_S w/ expSumLog |
1.026312 |
1.1686805 |
1.2133229 |
1.1991765 |
1.2420445 |
1.600904 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
1.044535 |
1.1885215 |
1.2693525 |
1.2119165 |
1.2469120 |
6.639532 |
4 |
colProds(X, rows, cols) w/ expSumLog |
0.974945 |
1.1750930 |
1.2145190 |
1.2161365 |
1.2562875 |
1.622386 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
5 |
colProds(X[rows, cols]) w/ direct |
1.061302 |
1.021510 |
1.090522 |
1.020264 |
1.010428 |
6.662003 |
3 |
colProds(X, rows, cols) w/ direct |
1.058508 |
1.034128 |
1.030552 |
1.028480 |
1.027536 |
1.002024 |
2 |
colProds_X_S w/ expSumLog |
1.952069 |
1.848195 |
1.849841 |
1.841508 |
1.841427 |
1.785557 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
1.986730 |
1.879573 |
1.935264 |
1.861073 |
1.848644 |
7.405357 |
4 |
colProds(X, rows, cols) w/ expSumLog |
1.854368 |
1.858336 |
1.851665 |
1.867553 |
1.862544 |
1.809517 |
Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 10x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
0.557322 |
0.6473255 |
0.7267380 |
0.6648705 |
0.6913685 |
6.163101 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.555565 |
0.6551515 |
0.6781582 |
0.6702035 |
0.6895050 |
0.873777 |
3 |
rowProds(X, cols, rows) w/ direct |
0.541358 |
0.6549870 |
0.7365054 |
0.6732120 |
0.6952990 |
6.095395 |
2 |
rowProds_X_S w/ expSumLog |
1.008335 |
1.1730865 |
1.2041849 |
1.1965245 |
1.2347695 |
1.582484 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
1.039314 |
1.1907545 |
1.2438429 |
1.2149530 |
1.2547920 |
2.188572 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
1.018895 |
1.2001285 |
1.2292273 |
1.2224570 |
1.2574410 |
1.558981 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
1.0000000 |
1.000000 |
1.0000000 |
1.000000 |
1.0000000 |
1.0000000 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.9968474 |
1.012090 |
0.9331536 |
1.008021 |
0.9973046 |
0.1417755 |
3 |
rowProds(X, cols, rows) w/ direct |
0.9713559 |
1.011836 |
1.0134400 |
1.012546 |
1.0056851 |
0.9890143 |
2 |
rowProds_X_S w/ expSumLog |
1.8092503 |
1.812205 |
1.6569725 |
1.799635 |
1.7859788 |
0.2567675 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
1.8648358 |
1.839499 |
1.7115424 |
1.827353 |
1.8149395 |
0.3551089 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
1.8281981 |
1.853980 |
1.6914311 |
1.838639 |
1.8187710 |
0.2529540 |
Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 10x1000 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 10x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
525.756 |
632.3360 |
655.9065 |
651.1925 |
674.5010 |
896.585 |
2 |
rowProds_X_S w/ direct |
557.322 |
647.3255 |
726.7380 |
664.8705 |
691.3685 |
6163.101 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.00000 |
1.000000 |
1.000000 |
1.000000 |
2 |
rowProds_X_S w/ direct |
1.060039 |
1.023705 |
1.10799 |
1.021005 |
1.025007 |
6.873973 |
Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x1000 matrix
> X <- data[["100x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE),
+ `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X,
+ rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X,
+ rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows,
+ cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows,
+ cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE),
+ `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X,
+ rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X,
+ rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols,
+ rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols,
+ rows], method = "expSumLog", na.rm = FALSE), unit = "ms")
Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
0.774959 |
0.844722 |
0.8739614 |
0.8539230 |
0.8751675 |
1.623594 |
3 |
colProds(X, rows, cols) w/ direct |
0.813472 |
0.964379 |
0.9896130 |
0.9757085 |
0.9969175 |
1.469689 |
5 |
colProds(X[rows, cols]) w/ direct |
0.834291 |
0.967196 |
0.9962637 |
0.9782095 |
1.0019710 |
1.786837 |
2 |
colProds_X_S w/ expSumLog |
2.246616 |
2.570511 |
2.6092187 |
2.5963635 |
2.6609010 |
3.233377 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
2.285602 |
2.697354 |
2.9305741 |
2.7201430 |
2.7646495 |
24.938368 |
4 |
colProds(X, rows, cols) w/ expSumLog |
2.438107 |
2.709574 |
3.1867407 |
2.7205825 |
2.7718770 |
24.639916 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
3 |
colProds(X, rows, cols) w/ direct |
1.049697 |
1.141652 |
1.132330 |
1.142619 |
1.139116 |
0.9052072 |
5 |
colProds(X[rows, cols]) w/ direct |
1.076561 |
1.144987 |
1.139940 |
1.145548 |
1.144891 |
1.1005442 |
2 |
colProds_X_S w/ expSumLog |
2.899013 |
3.043026 |
2.985508 |
3.040512 |
3.040448 |
1.9914936 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
2.949320 |
3.193185 |
3.353208 |
3.185466 |
3.158995 |
15.3599779 |
4 |
colProds(X, rows, cols) w/ expSumLog |
3.146111 |
3.207652 |
3.646317 |
3.185981 |
3.167253 |
15.1761561 |
Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 100x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
0.913361 |
1.016366 |
1.059492 |
1.042142 |
1.086821 |
1.563300 |
5 |
rowProds(X[cols, rows]) w/ direct |
1.042259 |
1.194009 |
1.227772 |
1.218082 |
1.237332 |
1.593861 |
3 |
rowProds(X, cols, rows) w/ direct |
1.048832 |
1.193943 |
1.661884 |
1.219029 |
1.239256 |
23.048014 |
2 |
rowProds_X_S w/ expSumLog |
2.401771 |
2.740555 |
2.997389 |
2.781973 |
2.824940 |
23.381652 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
2.609489 |
2.890916 |
2.954931 |
2.960818 |
2.985603 |
4.448444 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
2.579001 |
2.893291 |
2.973974 |
2.972091 |
3.000861 |
4.290152 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
5 |
rowProds(X[cols, rows]) w/ direct |
1.141125 |
1.174784 |
1.158831 |
1.168825 |
1.138488 |
1.019549 |
3 |
rowProds(X, cols, rows) w/ direct |
1.148321 |
1.174718 |
1.568566 |
1.169733 |
1.140258 |
14.743180 |
2 |
rowProds_X_S w/ expSumLog |
2.629597 |
2.696426 |
2.829081 |
2.669475 |
2.599269 |
14.956599 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
2.857018 |
2.844367 |
2.789007 |
2.841087 |
2.747097 |
2.845547 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
2.823638 |
2.846703 |
2.806980 |
2.851905 |
2.761136 |
2.744292 |
Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 100x1000 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 100x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
774.959 |
844.722 |
873.9614 |
853.923 |
875.1675 |
1623.594 |
2 |
rowProds_X_S w/ direct |
913.361 |
1016.365 |
1059.4923 |
1042.142 |
1086.8210 |
1563.300 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
rowProds_X_S w/ direct |
1.178593 |
1.203195 |
1.212287 |
1.220417 |
1.241843 |
0.9628639 |
Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x100 matrix
> X <- data[["1000x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE),
+ `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X,
+ rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X,
+ rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows,
+ cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows,
+ cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE),
+ `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X,
+ rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X,
+ rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols,
+ rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols,
+ rows], method = "expSumLog", na.rm = FALSE), unit = "ms")
Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
0.247535 |
0.2864045 |
0.3006736 |
0.2983275 |
0.3055005 |
0.429981 |
3 |
colProds(X, rows, cols) w/ direct |
0.342335 |
0.4017270 |
0.5006887 |
0.4139185 |
0.4224000 |
8.813239 |
5 |
colProds(X[rows, cols]) w/ direct |
0.342518 |
0.4034985 |
0.4177472 |
0.4147195 |
0.4212925 |
0.533589 |
2 |
colProds_X_S w/ expSumLog |
1.396613 |
1.6018535 |
1.6379117 |
1.6374335 |
1.6580245 |
2.268643 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
1.448869 |
1.7157955 |
1.7562088 |
1.7664835 |
1.7812070 |
2.511134 |
4 |
colProds(X, rows, cols) w/ expSumLog |
1.476296 |
1.7162295 |
1.8439057 |
1.7686895 |
1.7886480 |
10.177295 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
3 |
colProds(X, rows, cols) w/ direct |
1.382976 |
1.402656 |
1.665224 |
1.387463 |
1.382649 |
20.496810 |
5 |
colProds(X[rows, cols]) w/ direct |
1.383715 |
1.408841 |
1.389371 |
1.390148 |
1.379024 |
1.240959 |
2 |
colProds_X_S w/ expSumLog |
5.642083 |
5.592976 |
5.447475 |
5.488711 |
5.427240 |
5.276147 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
5.853188 |
5.990812 |
5.840915 |
5.921290 |
5.830455 |
5.840105 |
4 |
colProds(X, rows, cols) w/ expSumLog |
5.963989 |
5.992327 |
6.132583 |
5.928684 |
5.854812 |
23.669174 |
Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 1000x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
0.390746 |
0.444243 |
0.4581356 |
0.4504080 |
0.4613310 |
0.694193 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.518946 |
0.567984 |
0.5842130 |
0.5797555 |
0.5949395 |
0.768634 |
3 |
rowProds(X, cols, rows) w/ direct |
0.511310 |
0.574356 |
0.5860074 |
0.5828950 |
0.5970945 |
0.780831 |
2 |
rowProds_X_S w/ expSumLog |
1.520620 |
1.774465 |
1.8033133 |
1.7854080 |
1.8323560 |
2.430712 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
1.670471 |
1.900571 |
2.0210632 |
1.9154820 |
1.9619530 |
10.756083 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
1.616773 |
1.897766 |
2.0081928 |
1.9326720 |
1.9656200 |
10.708158 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
5 |
rowProds(X[cols, rows]) w/ direct |
1.328090 |
1.278544 |
1.275197 |
1.287179 |
1.289615 |
1.107234 |
3 |
rowProds(X, cols, rows) w/ direct |
1.308548 |
1.292887 |
1.279114 |
1.294149 |
1.294286 |
1.124804 |
2 |
rowProds_X_S w/ expSumLog |
3.891582 |
3.994357 |
3.936200 |
3.963979 |
3.971890 |
3.501493 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
4.275081 |
4.278224 |
4.411496 |
4.252771 |
4.252810 |
15.494370 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
4.137657 |
4.271910 |
4.383403 |
4.290936 |
4.260758 |
15.425333 |
Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 1000x100 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 1000x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
247.535 |
286.4045 |
300.6736 |
298.3275 |
305.5005 |
429.981 |
2 |
rowProds_X_S w/ direct |
390.746 |
444.2430 |
458.1356 |
450.4080 |
461.3310 |
694.193 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
2 |
rowProds_X_S w/ direct |
1.578548 |
1.551103 |
1.523698 |
1.509777 |
1.510083 |
1.614474 |
Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

Appendix
R version 4.1.1 Patched (2021-08-10 r80727)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS
Matrix products: default
BLAS: /home/hb/software/R-devel/R-4-1-branch/lib/R/lib/libRblas.so
LAPACK: /home/hb/software/R-devel/R-4-1-branch/lib/R/lib/libRlapack.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] microbenchmark_1.4-7 matrixStats_0.60.1 ggplot2_3.3.5
[4] knitr_1.33 R.devices_2.17.0 R.utils_2.10.1
[7] R.oo_1.24.0 R.methodsS3_1.8.1-9001 history_0.0.1-9000
loaded via a namespace (and not attached):
[1] Biobase_2.52.0 httr_1.4.2 splines_4.1.1
[4] bit64_4.0.5 network_1.17.1 assertthat_0.2.1
[7] highr_0.9 stats4_4.1.1 blob_1.2.2
[10] GenomeInfoDbData_1.2.6 robustbase_0.93-8 pillar_1.6.2
[13] RSQLite_2.2.8 lattice_0.20-44 glue_1.4.2
[16] digest_0.6.27 XVector_0.32.0 colorspace_2.0-2
[19] Matrix_1.3-4 XML_3.99-0.7 pkgconfig_2.0.3
[22] zlibbioc_1.38.0 genefilter_1.74.0 purrr_0.3.4
[25] ergm_4.1.2 xtable_1.8-4 scales_1.1.1
[28] tibble_3.1.4 annotate_1.70.0 KEGGREST_1.32.0
[31] farver_2.1.0 generics_0.1.0 IRanges_2.26.0
[34] ellipsis_0.3.2 cachem_1.0.6 withr_2.4.2
[37] BiocGenerics_0.38.0 mime_0.11 survival_3.2-13
[40] magrittr_2.0.1 crayon_1.4.1 statnet.common_4.5.0
[43] memoise_2.0.0 laeken_0.5.1 fansi_0.5.0
[46] R.cache_0.15.0 MASS_7.3-54 R.rsp_0.44.0
[49] progressr_0.8.0 tools_4.1.1 lifecycle_1.0.0
[52] S4Vectors_0.30.0 trust_0.1-8 munsell_0.5.0
[55] tabby_0.0.1-9001 AnnotationDbi_1.54.1 Biostrings_2.60.2
[58] compiler_4.1.1 GenomeInfoDb_1.28.1 rlang_0.4.11
[61] grid_4.1.1 RCurl_1.98-1.4 cwhmisc_6.6
[64] rappdirs_0.3.3 startup_0.15.0 labeling_0.4.2
[67] bitops_1.0-7 base64enc_0.1-3 boot_1.3-28
[70] gtable_0.3.0 DBI_1.1.1 markdown_1.1
[73] R6_2.5.1 lpSolveAPI_5.5.2.0-17.7 rle_0.9.2
[76] dplyr_1.0.7 fastmap_1.1.0 bit_4.0.4
[79] utf8_1.2.2 parallel_4.1.1 Rcpp_1.0.7
[82] vctrs_0.3.8 png_0.1-7 DEoptimR_1.0-9
[85] tidyselect_1.1.1 xfun_0.25 coda_0.19-4
Total processing time was 17.37 secs.
Reproducibility
To reproduce this report, do:
html <- matrixStats:::benchmark('colRowProds_subset')
Copyright Dongcan Jiang. Last updated on 2021-08-25 19:04:19 (+0200 UTC). Powered by RSP.