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.013104 |
0.0134945 |
0.0140341 |
0.0137760 |
0.0140640 |
0.030411 |
3 |
colProds(X, rows, cols) w/ direct |
0.014451 |
0.0149205 |
0.0153308 |
0.0151895 |
0.0154840 |
0.022014 |
5 |
colProds(X[rows, cols]) w/ direct |
0.014543 |
0.0150400 |
0.0179708 |
0.0152405 |
0.0155285 |
0.256450 |
2 |
colProds_X_S w/ expSumLog |
0.020571 |
0.0210500 |
0.0216345 |
0.0213085 |
0.0217850 |
0.036162 |
4 |
colProds(X, rows, cols) w/ expSumLog |
0.021690 |
0.0224525 |
0.0228605 |
0.0226650 |
0.0229620 |
0.034539 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
0.022037 |
0.0225500 |
0.0239190 |
0.0227200 |
0.0231395 |
0.077964 |
|
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.102793 |
1.105673 |
1.092397 |
1.102606 |
1.100967 |
0.7238828 |
5 |
colProds(X[rows, cols]) w/ direct |
1.109814 |
1.114528 |
1.280507 |
1.106308 |
1.104131 |
8.4328039 |
2 |
colProds_X_S w/ expSumLog |
1.569826 |
1.559895 |
1.541564 |
1.546784 |
1.548990 |
1.1891092 |
4 |
colProds(X, rows, cols) w/ expSumLog |
1.655220 |
1.663826 |
1.628918 |
1.645253 |
1.632679 |
1.1357404 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
1.681700 |
1.671051 |
1.704344 |
1.649245 |
1.645300 |
2.5636776 |
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.013297 |
0.0136985 |
0.0141482 |
0.0140395 |
0.0144565 |
0.016972 |
3 |
rowProds(X, cols, rows) w/ direct |
0.014541 |
0.0152750 |
0.0159843 |
0.0155035 |
0.0160040 |
0.030366 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.014723 |
0.0152890 |
0.0157780 |
0.0155515 |
0.0158600 |
0.025774 |
2 |
rowProds_X_S w/ expSumLog |
0.020789 |
0.0214310 |
0.0220587 |
0.0217115 |
0.0221525 |
0.046059 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
0.022018 |
0.0227455 |
0.0234463 |
0.0230640 |
0.0235200 |
0.038802 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
0.022227 |
0.0227205 |
0.0259758 |
0.0230840 |
0.0235160 |
0.290159 |
|
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.093555 |
1.115086 |
1.129781 |
1.104277 |
1.107045 |
1.789182 |
5 |
rowProds(X[cols, rows]) w/ direct |
1.107242 |
1.116108 |
1.115198 |
1.107696 |
1.097084 |
1.518619 |
2 |
rowProds_X_S w/ expSumLog |
1.563435 |
1.564478 |
1.559125 |
1.546458 |
1.532356 |
2.713823 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
1.655862 |
1.660437 |
1.657196 |
1.642794 |
1.626950 |
2.286236 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
1.671580 |
1.658612 |
1.835986 |
1.644218 |
1.626673 |
17.096335 |
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 |
1 |
colProds_X_S w/ direct |
13.104 |
13.4945 |
14.03414 |
13.7760 |
14.0640 |
30.411 |
2 |
rowProds_X_S w/ direct |
13.297 |
13.6985 |
14.14816 |
14.0395 |
14.4565 |
16.972 |
|
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.014728 |
1.015117 |
1.008125 |
1.019127 |
1.027908 |
0.5580875 |
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.073709 |
0.0749175 |
0.0905664 |
0.0809315 |
0.0977605 |
0.200449 |
3 |
colProds(X, rows, cols) w/ direct |
0.083946 |
0.0864785 |
0.1019647 |
0.0934380 |
0.1096635 |
0.172019 |
5 |
colProds(X[rows, cols]) w/ direct |
0.084412 |
0.0861960 |
0.1026389 |
0.0947585 |
0.1104975 |
0.189805 |
2 |
colProds_X_S w/ expSumLog |
0.220354 |
0.2223560 |
0.2641322 |
0.2398320 |
0.2857195 |
0.428113 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
0.230429 |
0.2335475 |
0.2738112 |
0.2508620 |
0.2991160 |
0.402502 |
4 |
colProds(X, rows, cols) w/ expSumLog |
0.231497 |
0.2343245 |
0.2724815 |
0.2576330 |
0.2907995 |
0.420745 |
|
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.138884 |
1.154316 |
1.125855 |
1.154532 |
1.121757 |
0.8581684 |
5 |
colProds(X[rows, cols]) w/ direct |
1.145206 |
1.150546 |
1.133299 |
1.170848 |
1.130288 |
0.9468992 |
2 |
colProds_X_S w/ expSumLog |
2.989513 |
2.968011 |
2.916447 |
2.963395 |
2.922648 |
2.1357702 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
3.126199 |
3.117396 |
3.023318 |
3.099683 |
3.059682 |
2.0080020 |
4 |
colProds(X, rows, cols) w/ expSumLog |
3.140688 |
3.127767 |
3.008636 |
3.183346 |
2.974611 |
2.0990127 |
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.085764 |
0.0880185 |
0.1047172 |
0.1042270 |
0.1113325 |
0.158051 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.096795 |
0.0980180 |
0.1143780 |
0.1058170 |
0.1240545 |
0.191773 |
3 |
rowProds(X, cols, rows) w/ direct |
0.096302 |
0.0986680 |
0.1129483 |
0.1094275 |
0.1206955 |
0.207510 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
0.242107 |
0.2439025 |
0.2871896 |
0.2593440 |
0.3062615 |
0.826660 |
2 |
rowProds_X_S w/ expSumLog |
0.231956 |
0.2341890 |
0.2838343 |
0.2658600 |
0.3061985 |
0.720162 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
0.240587 |
0.2451280 |
0.2930772 |
0.2885740 |
0.3132735 |
0.456473 |
|
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.128620 |
1.113607 |
1.092256 |
1.015255 |
1.114270 |
1.213361 |
3 |
rowProds(X, cols, rows) w/ direct |
1.122872 |
1.120992 |
1.078603 |
1.049896 |
1.084099 |
1.312931 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
2.822944 |
2.771037 |
2.742526 |
2.488261 |
2.750872 |
5.230337 |
2 |
rowProds_X_S w/ expSumLog |
2.704585 |
2.660679 |
2.710485 |
2.550779 |
2.750307 |
4.556517 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
2.805221 |
2.784960 |
2.798750 |
2.768707 |
2.813855 |
2.888137 |
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 |
73.709 |
74.9175 |
90.56644 |
80.9315 |
97.7605 |
200.449 |
2 |
rowProds_X_S w/ direct |
85.764 |
88.0185 |
104.71719 |
104.2270 |
111.3325 |
158.051 |
|
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.163549 |
1.174872 |
1.156247 |
1.287842 |
1.138829 |
0.7884849 |
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.030052 |
0.0340035 |
0.0390363 |
0.0376965 |
0.0416195 |
0.059581 |
5 |
colProds(X[rows, cols]) w/ direct |
0.042652 |
0.0467585 |
0.0543521 |
0.0518050 |
0.0613195 |
0.090626 |
3 |
colProds(X, rows, cols) w/ direct |
0.042472 |
0.0467015 |
0.0546875 |
0.0526190 |
0.0611205 |
0.086783 |
2 |
colProds_X_S w/ expSumLog |
0.148410 |
0.1601030 |
0.1790544 |
0.1712910 |
0.1900625 |
0.301234 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
0.160447 |
0.1735535 |
0.1978269 |
0.1889030 |
0.2119135 |
0.332199 |
4 |
colProds(X, rows, cols) w/ expSumLog |
0.161044 |
0.1750000 |
0.1971329 |
0.1917990 |
0.2140610 |
0.286676 |
|
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.419273 |
1.375108 |
1.392346 |
1.374265 |
1.473336 |
1.521055 |
3 |
colProds(X, rows, cols) w/ direct |
1.413284 |
1.373432 |
1.400938 |
1.395859 |
1.468554 |
1.456555 |
2 |
colProds_X_S w/ expSumLog |
4.938440 |
4.708427 |
4.586869 |
4.543950 |
4.566669 |
5.055873 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
5.338979 |
5.103989 |
5.067766 |
5.011155 |
5.091688 |
5.575586 |
4 |
colProds(X, rows, cols) w/ expSumLog |
5.358845 |
5.146529 |
5.049988 |
5.087979 |
5.143286 |
4.811534 |
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.041595 |
0.0454475 |
0.0525412 |
0.0525010 |
0.0550535 |
0.071829 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.053410 |
0.0611800 |
0.0688919 |
0.0690400 |
0.0718465 |
0.092042 |
3 |
rowProds(X, cols, rows) w/ direct |
0.053330 |
0.0643215 |
0.0701024 |
0.0696200 |
0.0723155 |
0.094215 |
2 |
rowProds_X_S w/ expSumLog |
0.148190 |
0.1758040 |
0.1940258 |
0.1891415 |
0.2081830 |
0.284685 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
0.161066 |
0.1798505 |
0.2034044 |
0.2043790 |
0.2124210 |
0.287890 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
0.160327 |
0.1801010 |
0.2069060 |
0.2047570 |
0.2254720 |
0.269866 |
|
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.284049 |
1.346169 |
1.311198 |
1.315023 |
1.305031 |
1.281404 |
3 |
rowProds(X, cols, rows) w/ direct |
1.282125 |
1.415292 |
1.334236 |
1.326070 |
1.313549 |
1.311657 |
2 |
rowProds_X_S w/ expSumLog |
3.562688 |
3.868288 |
3.692829 |
3.602627 |
3.781467 |
3.963371 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
3.872244 |
3.957324 |
3.871329 |
3.892859 |
3.858447 |
4.007991 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
3.854478 |
3.962836 |
3.937975 |
3.900059 |
4.095507 |
3.757062 |
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 |
30.052 |
34.0035 |
39.03631 |
37.6965 |
41.6195 |
59.581 |
2 |
rowProds_X_S w/ direct |
41.595 |
45.4475 |
52.54123 |
52.5010 |
55.0535 |
71.829 |
|
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.384101 |
1.336554 |
1.345958 |
1.392729 |
1.322781 |
1.205569 |
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.523648 |
0.5356855 |
0.5759407 |
0.5537635 |
0.587121 |
0.875800 |
5 |
colProds(X[rows, cols]) w/ direct |
0.535452 |
0.5474045 |
0.5743448 |
0.5597895 |
0.585659 |
0.784047 |
3 |
colProds(X, rows, cols) w/ direct |
0.534339 |
0.5455865 |
0.5873932 |
0.5609605 |
0.589269 |
0.891698 |
2 |
colProds_X_S w/ expSumLog |
1.024895 |
1.0426410 |
1.1222524 |
1.0650560 |
1.158451 |
1.669401 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
1.037188 |
1.0502250 |
1.1209347 |
1.0700640 |
1.135411 |
1.583419 |
4 |
colProds(X, rows, cols) w/ expSumLog |
1.032517 |
1.0540280 |
1.2408611 |
1.0860820 |
1.169466 |
6.607324 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
1.0000000 |
5 |
colProds(X[rows, cols]) w/ direct |
1.022542 |
1.021877 |
0.997229 |
1.010882 |
0.9975099 |
0.8952352 |
3 |
colProds(X, rows, cols) w/ direct |
1.020416 |
1.018483 |
1.019885 |
1.012997 |
1.0036585 |
1.0181525 |
2 |
colProds_X_S w/ expSumLog |
1.957221 |
1.946368 |
1.948555 |
1.923305 |
1.9731044 |
1.9061441 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
1.980697 |
1.960525 |
1.946267 |
1.932348 |
1.9338620 |
1.8079687 |
4 |
colProds(X, rows, cols) w/ expSumLog |
1.971777 |
1.967625 |
2.154494 |
1.961274 |
1.9918645 |
7.5443298 |
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.525206 |
0.537019 |
0.5949731 |
0.5571330 |
0.598142 |
1.321915 |
3 |
rowProds(X, cols, rows) w/ direct |
0.538670 |
0.548481 |
0.6469377 |
0.5689670 |
0.599152 |
5.934930 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.536763 |
0.549954 |
0.6483152 |
0.5736465 |
0.600296 |
5.872529 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
1.036684 |
1.057124 |
1.1446338 |
1.0820275 |
1.148299 |
2.715708 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
1.033060 |
1.060096 |
1.1304942 |
1.0821795 |
1.141911 |
1.701270 |
2 |
rowProds_X_S w/ expSumLog |
1.024732 |
1.051346 |
1.1299487 |
1.0837890 |
1.145460 |
1.937171 |
|
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.025636 |
1.021344 |
1.087339 |
1.021241 |
1.001689 |
4.489646 |
5 |
rowProds(X[cols, rows]) w/ direct |
1.022005 |
1.024087 |
1.089655 |
1.029640 |
1.003601 |
4.442441 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
1.973862 |
1.968504 |
1.923841 |
1.942135 |
1.919777 |
2.054374 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
1.966962 |
1.974037 |
1.900076 |
1.942408 |
1.909096 |
1.286974 |
2 |
rowProds_X_S w/ expSumLog |
1.951105 |
1.957744 |
1.899159 |
1.945297 |
1.915031 |
1.465428 |
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 |
523.648 |
535.6855 |
575.9407 |
553.7635 |
587.121 |
875.800 |
2 |
rowProds_X_S w/ direct |
525.206 |
537.0190 |
594.9731 |
557.1330 |
598.142 |
1321.915 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.00000 |
2 |
rowProds_X_S w/ direct |
1.002975 |
1.002489 |
1.033046 |
1.006085 |
1.018771 |
1.50938 |
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.693250 |
0.7210880 |
1.0752459 |
0.7540725 |
0.861600 |
24.251464 |
5 |
colProds(X[rows, cols]) w/ direct |
0.786981 |
0.8192815 |
0.9336942 |
0.8533490 |
0.962303 |
2.250769 |
3 |
colProds(X, rows, cols) w/ direct |
0.796398 |
0.8288000 |
0.9344435 |
0.8703645 |
0.991692 |
1.634443 |
2 |
colProds_X_S w/ expSumLog |
2.137575 |
2.2014775 |
2.4854195 |
2.2775650 |
2.559591 |
5.828753 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
2.258601 |
2.2933745 |
2.5132972 |
2.3563435 |
2.601824 |
5.138715 |
4 |
colProds(X, rows, cols) w/ expSumLog |
2.254370 |
2.3022690 |
2.7948370 |
2.3669620 |
2.582371 |
25.151733 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.0000000 |
1.000000 |
1.000000 |
1.0000000 |
5 |
colProds(X[rows, cols]) w/ direct |
1.135205 |
1.136174 |
0.8683541 |
1.131654 |
1.116879 |
0.0928096 |
3 |
colProds(X, rows, cols) w/ direct |
1.148789 |
1.149374 |
0.8690509 |
1.154219 |
1.150989 |
0.0673956 |
2 |
colProds_X_S w/ expSumLog |
3.083411 |
3.052994 |
2.3114894 |
3.020353 |
2.970742 |
0.2403464 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
3.257989 |
3.180436 |
2.3374163 |
3.124824 |
3.019758 |
0.2118930 |
4 |
colProds(X, rows, cols) w/ expSumLog |
3.251886 |
3.192771 |
2.5992538 |
3.138905 |
2.997180 |
1.0371223 |
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.826818 |
0.8845375 |
1.008451 |
0.9732775 |
1.076523 |
1.749637 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.980743 |
1.0651300 |
1.194578 |
1.1332255 |
1.265120 |
2.544259 |
3 |
rowProds(X, cols, rows) w/ direct |
0.996019 |
1.0702235 |
1.184752 |
1.1399655 |
1.265089 |
1.923425 |
2 |
rowProds_X_S w/ expSumLog |
2.294785 |
2.4054455 |
2.691871 |
2.5605495 |
2.800074 |
4.140237 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
2.469234 |
2.5475565 |
2.855325 |
2.7065260 |
3.093694 |
4.504706 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
2.457406 |
2.5713975 |
3.324232 |
2.7079870 |
2.940023 |
27.454912 |
|
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.186165 |
1.204166 |
1.184567 |
1.164340 |
1.175191 |
1.454164 |
3 |
rowProds(X, cols, rows) w/ direct |
1.204641 |
1.209924 |
1.174823 |
1.171265 |
1.175163 |
1.099328 |
2 |
rowProds_X_S w/ expSumLog |
2.775441 |
2.719439 |
2.669312 |
2.630853 |
2.601035 |
2.366341 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
2.986430 |
2.880100 |
2.831397 |
2.780837 |
2.873784 |
2.574652 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
2.972125 |
2.907053 |
3.296374 |
2.782338 |
2.731036 |
15.691776 |
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 |
693.250 |
721.0880 |
1075.246 |
754.0725 |
861.600 |
24251.464 |
2 |
rowProds_X_S w/ direct |
826.818 |
884.5375 |
1008.451 |
973.2775 |
1076.523 |
1749.637 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.0000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
rowProds_X_S w/ direct |
1.192669 |
1.226671 |
0.9378796 |
1.290695 |
1.249446 |
0.0721456 |
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.238667 |
0.2472480 |
0.2776331 |
0.2557235 |
0.2985885 |
0.482010 |
5 |
colProds(X[rows, cols]) w/ direct |
0.335498 |
0.3433565 |
0.4005840 |
0.3552270 |
0.4297075 |
0.723056 |
3 |
colProds(X, rows, cols) w/ direct |
0.335107 |
0.3439390 |
0.3864759 |
0.3559160 |
0.3932580 |
0.688277 |
2 |
colProds_X_S w/ expSumLog |
1.307053 |
1.3253225 |
1.4385322 |
1.3494585 |
1.4848140 |
2.302503 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
1.408062 |
1.4204860 |
1.7333478 |
1.4364855 |
1.6093775 |
11.177601 |
4 |
colProds(X, rows, cols) w/ expSumLog |
1.403216 |
1.4319280 |
1.6079715 |
1.4876970 |
1.7257095 |
2.530356 |
|
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.405716 |
1.388713 |
1.442854 |
1.389106 |
1.439129 |
1.500085 |
3 |
colProds(X, rows, cols) w/ direct |
1.404078 |
1.391069 |
1.392038 |
1.391800 |
1.317057 |
1.427931 |
2 |
colProds_X_S w/ expSumLog |
5.476471 |
5.360296 |
5.181414 |
5.277022 |
4.972777 |
4.776878 |
6 |
colProds(X[rows, cols]) w/ expSumLog |
5.899693 |
5.745187 |
6.243303 |
5.617339 |
5.389951 |
23.189563 |
4 |
colProds(X, rows, cols) w/ expSumLog |
5.879388 |
5.791464 |
5.791713 |
5.817600 |
5.779558 |
5.249592 |
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.374254 |
0.3786410 |
0.4088243 |
0.3835165 |
0.4063745 |
0.701556 |
5 |
rowProds(X[cols, rows]) w/ direct |
0.481832 |
0.4918155 |
0.5228188 |
0.4981410 |
0.5193815 |
0.813087 |
3 |
rowProds(X, cols, rows) w/ direct |
0.484074 |
0.4920385 |
0.6275272 |
0.5000475 |
0.5806940 |
8.926097 |
2 |
rowProds_X_S w/ expSumLog |
1.463210 |
1.4706190 |
1.6064194 |
1.4935535 |
1.6759630 |
2.421766 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
1.570197 |
1.5803785 |
1.7876741 |
1.5888510 |
1.7326515 |
10.818760 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
1.567760 |
1.5828360 |
1.6866927 |
1.6057930 |
1.7217105 |
2.216337 |
|
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.287446 |
1.298897 |
1.278835 |
1.298878 |
1.278086 |
1.158977 |
3 |
rowProds(X, cols, rows) w/ direct |
1.293437 |
1.299486 |
1.534956 |
1.303849 |
1.428963 |
12.723285 |
2 |
rowProds_X_S w/ expSumLog |
3.909671 |
3.883940 |
3.929364 |
3.894366 |
4.124184 |
3.451992 |
6 |
rowProds(X[cols, rows]) w/ expSumLog |
4.195538 |
4.173818 |
4.372719 |
4.142849 |
4.263682 |
15.421093 |
4 |
rowProds(X, cols, rows) w/ expSumLog |
4.189027 |
4.180308 |
4.125715 |
4.187024 |
4.236758 |
3.159173 |
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 |
238.667 |
247.248 |
277.6331 |
255.7235 |
298.5885 |
482.010 |
2 |
rowProds_X_S w/ direct |
374.254 |
378.641 |
408.8243 |
383.5165 |
406.3745 |
701.556 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colProds_X_S w/ direct |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.00000 |
2 |
rowProds_X_S w/ direct |
1.568101 |
1.531422 |
1.472534 |
1.499731 |
1.360985 |
1.45548 |
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.0 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] rstudioapi_0.13 rappdirs_0.3.3 startup_0.15.0
[67] labeling_0.4.2 bitops_1.0-7 base64enc_0.1-3
[70] boot_1.3-28 gtable_0.3.0 DBI_1.1.1
[73] markdown_1.1 R6_2.5.1 lpSolveAPI_5.5.2.0-17.7
[76] rle_0.9.2 dplyr_1.0.7 fastmap_1.1.0
[79] bit_4.0.4 utf8_1.2.2 parallel_4.1.1
[82] Rcpp_1.0.7 vctrs_0.3.8 png_0.1-7
[85] DEoptimR_1.0-9 tidyselect_1.1.1 xfun_0.25
[88] coda_0.19-4
Total processing time was 17.82 secs.
Reproducibility
To reproduce this report, do:
html <- matrixStats:::benchmark('colRowProds_subset')
Copyright Dongcan Jiang. Last updated on 2021-08-25 22:24:46 (+0200 UTC). Powered by RSP.