This report benchmark the performance of colCumprods() and rowCumprods() on subsetted computation.
> 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 = mode, range = c(-1, 1))
> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5201463 277.8 8529671 455.6 8529671 455.6
Vcells 9793088 74.8 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193100 277.4 8529671 455.6 8529671 455.6
Vcells 9765808 74.6 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.001822 | 0.0020080 | 0.0029606 | 0.0020805 | 0.0021580 | 0.088577 |
| 2 | colCumprods(X, rows, cols) | 0.002079 | 0.0023585 | 0.0025110 | 0.0024480 | 0.0025580 | 0.004649 |
| 3 | colCumprods(X[rows, cols]) | 0.002675 | 0.0030345 | 0.0032072 | 0.0031215 | 0.0032475 | 0.007598 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.00000 | 1.000000 | 1.0000000 |
| 2 | colCumprods(X, rows, cols) | 1.141054 | 1.174552 | 0.8481371 | 1.17664 | 1.185357 | 0.0524854 |
| 3 | colCumprods(X[rows, cols]) | 1.468167 | 1.511205 | 1.0832998 | 1.50036 | 1.504866 | 0.0857785 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+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 | rowCumprods_X_S | 0.001758 | 0.0020375 | 0.0021567 | 0.0021030 | 0.0021980 | 0.004234 |
| 2 | rowCumprods(X, cols, rows) | 0.002235 | 0.0024510 | 0.0034122 | 0.0025235 | 0.0026350 | 0.087051 |
| 3 | rowCumprods(X[cols, rows]) | 0.002617 | 0.0030700 | 0.0032103 | 0.0031590 | 0.0032695 | 0.005318 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 1.271331 | 1.202945 | 1.582154 | 1.199952 | 1.198817 | 20.559991 |
| 3 | rowCumprods(X[cols, rows]) | 1.488623 | 1.506749 | 1.488543 | 1.502140 | 1.487489 | 1.256023 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+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 | colCumprods_X_S | 1.822 | 2.0080 | 2.96063 | 2.0805 | 2.158 | 88.577 |
| 2 | rowCumprods_X_S | 1.758 | 2.0375 | 2.15668 | 2.1030 | 2.198 | 4.234 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.0000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCumprods_X_S | 0.9648738 | 1.014691 | 0.7284531 | 1.010815 | 1.018536 | 0.0478002 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5191708 277.3 8529671 455.6 8529671 455.6
Vcells 9434675 72.0 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5191684 277.3 8529671 455.6 8529671 455.6
Vcells 9439728 72.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colCumprods(X, rows, cols) | 0.021441 | 0.0223445 | 0.0226823 | 0.0226510 | 0.0228050 | 0.02858 |
| 1 | colCumprods_X_S | 0.022804 | 0.0238195 | 0.0241365 | 0.0239320 | 0.0240325 | 0.03798 |
| 3 | colCumprods(X[rows, cols]) | 0.033756 | 0.0351225 | 0.0356195 | 0.0352965 | 0.0354945 | 0.05809 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colCumprods(X, rows, cols) | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCumprods_X_S | 1.063570 | 1.066012 | 1.064113 | 1.056554 | 1.053826 | 1.328901 |
| 3 | colCumprods(X[rows, cols]) | 1.574367 | 1.571863 | 1.570367 | 1.558276 | 1.556435 | 2.032540 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+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 | rowCumprods_X_S | 0.023088 | 0.023602 | 0.0241635 | 0.0242950 | 0.0244940 | 0.027498 |
| 2 | rowCumprods(X, cols, rows) | 0.029301 | 0.030197 | 0.0310790 | 0.0308155 | 0.0309935 | 0.060236 |
| 3 | rowCumprods(X[cols, rows]) | 0.034018 | 0.034710 | 0.0357621 | 0.0357075 | 0.0359090 | 0.049497 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 1.269101 | 1.279426 | 1.286195 | 1.268389 | 1.265351 | 2.190559 |
| 3 | rowCumprods(X[cols, rows]) | 1.473406 | 1.470638 | 1.480001 | 1.469747 | 1.466033 | 1.800022 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+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 | colCumprods_X_S | 22.804 | 23.8195 | 24.13649 | 23.932 | 24.0325 | 37.980 |
| 2 | rowCumprods_X_S | 23.088 | 23.6020 | 24.16353 | 24.295 | 24.4940 | 27.498 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.0000000 | 1.00000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCumprods_X_S | 1.012454 | 0.9908688 | 1.00112 | 1.015168 | 1.019203 | 0.7240126 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5192450 277.4 8529671 455.6 8529671 455.6
Vcells 9438730 72.1 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5192426 277.4 8529671 455.6 8529671 455.6
Vcells 9443783 72.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.021988 | 0.0229230 | 0.0230527 | 0.0230720 | 0.023194 | 0.027323 |
| 2 | colCumprods(X, rows, cols) | 0.022796 | 0.0238680 | 0.0243033 | 0.0242825 | 0.024512 | 0.038235 |
| 3 | colCumprods(X[rows, cols]) | 0.033491 | 0.0339615 | 0.0352297 | 0.0351105 | 0.035352 | 0.060301 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCumprods(X, rows, cols) | 1.036747 | 1.041225 | 1.054248 | 1.052466 | 1.056825 | 1.399371 |
| 3 | colCumprods(X[rows, cols]) | 1.523149 | 1.481547 | 1.528226 | 1.521780 | 1.524187 | 2.206968 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+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 | rowCumprods_X_S | 0.023211 | 0.0249755 | 0.0255337 | 0.0252190 | 0.0262985 | 0.028755 |
| 2 | rowCumprods(X, cols, rows) | 0.031612 | 0.0339985 | 0.0348458 | 0.0352500 | 0.0357070 | 0.046902 |
| 3 | rowCumprods(X[cols, rows]) | 0.035556 | 0.0381950 | 0.0397198 | 0.0388305 | 0.0402595 | 0.070345 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 1.36194 | 1.361274 | 1.364701 | 1.397756 | 1.357758 | 1.631090 |
| 3 | rowCumprods(X[cols, rows]) | 1.53186 | 1.529299 | 1.555584 | 1.539732 | 1.530867 | 2.446357 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+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 | colCumprods_X_S | 21.988 | 22.9230 | 23.05271 | 23.072 | 23.1940 | 27.323 |
| 2 | rowCumprods_X_S | 23.211 | 24.9755 | 25.53368 | 25.219 | 26.2985 | 28.755 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 2 | rowCumprods_X_S | 1.055621 | 1.089539 | 1.107622 | 1.093057 | 1.133849 | 1.05241 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5192655 277.4 8529671 455.6 8529671 455.6
Vcells 9439582 72.1 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5192631 277.4 8529671 455.6 8529671 455.6
Vcells 9444635 72.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.025506 | 0.0257285 | 0.0262958 | 0.0258245 | 0.0260210 | 0.041701 |
| 2 | colCumprods(X, rows, cols) | 0.026499 | 0.0272175 | 0.0277237 | 0.0274540 | 0.0276560 | 0.045202 |
| 3 | colCumprods(X[rows, cols]) | 0.039103 | 0.0395035 | 0.0402056 | 0.0397990 | 0.0400215 | 0.046300 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCumprods(X, rows, cols) | 1.038932 | 1.057874 | 1.054303 | 1.063099 | 1.062834 | 1.083955 |
| 3 | colCumprods(X[rows, cols]) | 1.533090 | 1.535399 | 1.528976 | 1.541133 | 1.538046 | 1.110285 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+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 | rowCumprods_X_S | 0.021406 | 0.0218415 | 0.0221303 | 0.0219920 | 0.0222470 | 0.026927 |
| 2 | rowCumprods(X, cols, rows) | 0.029481 | 0.0301780 | 0.0310873 | 0.0303385 | 0.0306885 | 0.057404 |
| 3 | rowCumprods(X[cols, rows]) | 0.033306 | 0.0339000 | 0.0346626 | 0.0340470 | 0.0345015 | 0.049647 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 1.377231 | 1.381682 | 1.404741 | 1.379524 | 1.379444 | 2.131838 |
| 3 | rowCumprods(X[cols, rows]) | 1.555919 | 1.552091 | 1.566297 | 1.548154 | 1.550838 | 1.843763 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 21.406 | 21.8415 | 22.13029 | 21.9920 | 22.247 | 26.927 |
| 1 | colCumprods_X_S | 25.506 | 25.7285 | 26.29576 | 25.8245 | 26.021 | 41.701 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCumprods_X_S | 1.191535 | 1.177964 | 1.188225 | 1.174268 | 1.169641 | 1.548669 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5192866 277.4 8529671 455.6 8529671 455.6
Vcells 9462259 72.2 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5192842 277.4 8529671 455.6 8529671 455.6
Vcells 9512312 72.6 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colCumprods(X, rows, cols) | 0.126896 | 0.1387655 | 0.1601597 | 0.1555865 | 0.1759090 | 0.277073 |
| 1 | colCumprods_X_S | 0.134134 | 0.1492715 | 0.1720807 | 0.1678155 | 0.1934280 | 0.246906 |
| 3 | colCumprods(X[rows, cols]) | 0.200267 | 0.2291715 | 0.2606636 | 0.2541380 | 0.2841425 | 0.356816 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colCumprods(X, rows, cols) | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 1 | colCumprods_X_S | 1.057039 | 1.075711 | 1.074432 | 1.078599 | 1.099591 | 0.8911226 |
| 3 | colCumprods(X[rows, cols]) | 1.578198 | 1.651502 | 1.627524 | 1.633419 | 1.615281 | 1.2878050 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+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 | rowCumprods_X_S | 0.128142 | 0.149196 | 0.1677644 | 0.1627060 | 0.181955 | 0.244547 |
| 2 | rowCumprods(X, cols, rows) | 0.167780 | 0.182036 | 0.2084298 | 0.2041705 | 0.219153 | 0.327482 |
| 3 | rowCumprods(X[cols, rows]) | 0.191850 | 0.221605 | 0.2487560 | 0.2418305 | 0.277303 | 0.325854 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 1.309329 | 1.220113 | 1.242395 | 1.254843 | 1.204435 | 1.339137 |
| 3 | rowCumprods(X[cols, rows]) | 1.497167 | 1.485328 | 1.482770 | 1.486303 | 1.524020 | 1.332480 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 128.142 | 149.1960 | 167.7644 | 162.7060 | 181.955 | 244.547 |
| 1 | colCumprods_X_S | 134.134 | 149.2715 | 172.0807 | 167.8155 | 193.428 | 246.906 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCumprods_X_S | 1.046761 | 1.000506 | 1.025728 | 1.031403 | 1.063054 | 1.009646 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193076 277.4 8529671 455.6 8529671 455.6
Vcells 9463043 72.2 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193052 277.4 8529671 455.6 8529671 455.6
Vcells 9513096 72.6 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colCumprods(X, rows, cols) | 0.121293 | 0.1392520 | 0.1606841 | 0.1574875 | 0.1692505 | 0.237311 |
| 1 | colCumprods_X_S | 0.128511 | 0.1474575 | 0.1661782 | 0.1616625 | 0.1711695 | 0.251502 |
| 3 | colCumprods(X[rows, cols]) | 0.193243 | 0.2196735 | 0.2546033 | 0.2427595 | 0.2880905 | 0.374580 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colCumprods(X, rows, cols) | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCumprods_X_S | 1.059509 | 1.058925 | 1.034192 | 1.026510 | 1.011338 | 1.059799 |
| 3 | colCumprods(X[rows, cols]) | 1.593192 | 1.577525 | 1.584495 | 1.541452 | 1.702155 | 1.578435 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+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 | rowCumprods_X_S | 0.134418 | 0.1417770 | 0.1634373 | 0.158983 | 0.1761790 | 0.232506 |
| 2 | rowCumprods(X, cols, rows) | 0.170420 | 0.1795645 | 0.2088120 | 0.207295 | 0.2220780 | 0.350441 |
| 3 | rowCumprods(X[cols, rows]) | 0.201386 | 0.2090830 | 0.2436314 | 0.231745 | 0.2669365 | 0.343087 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 1.267836 | 1.266528 | 1.277628 | 1.303881 | 1.260525 | 1.507234 |
| 3 | rowCumprods(X[cols, rows]) | 1.498207 | 1.474731 | 1.490673 | 1.457672 | 1.515144 | 1.475605 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 134.418 | 141.7770 | 163.4373 | 158.9830 | 176.1790 | 232.506 |
| 1 | colCumprods_X_S | 128.511 | 147.4575 | 166.1782 | 161.6625 | 171.1695 | 251.502 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 1.000000 |
| 1 | colCumprods_X_S | 0.956055 | 1.040066 | 1.016771 | 1.016854 | 0.9715659 | 1.081701 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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 = mode, range = c(-1, 1))
> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193294 277.4 8529671 455.6 8529671 455.6
Vcells 9554158 72.9 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193261 277.4 8529671 455.6 8529671 455.6
Vcells 9554296 72.9 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.001723 | 0.0018920 | 0.0021445 | 0.0019985 | 0.002053 | 0.016670 |
| 2 | colCumprods(X, rows, cols) | 0.001984 | 0.0022735 | 0.0023828 | 0.0023190 | 0.002411 | 0.004820 |
| 3 | colCumprods(X[rows, cols]) | 0.002756 | 0.0029670 | 0.0031282 | 0.0030700 | 0.003185 | 0.007519 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colCumprods(X, rows, cols) | 1.151480 | 1.201639 | 1.111126 | 1.160370 | 1.174379 | 0.2891422 |
| 3 | colCumprods(X[rows, cols]) | 1.599536 | 1.568182 | 1.458694 | 1.536152 | 1.551388 | 0.4510498 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+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 | rowCumprods_X_S | 0.001694 | 0.0019545 | 0.0022622 | 0.0020285 | 0.0021635 | 0.012304 |
| 2 | rowCumprods(X, cols, rows) | 0.002157 | 0.0023070 | 0.0027454 | 0.0023850 | 0.0025010 | 0.033352 |
| 3 | rowCumprods(X[cols, rows]) | 0.002732 | 0.0030520 | 0.0032582 | 0.0031625 | 0.0033055 | 0.008278 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCumprods(X, cols, rows) | 1.273318 | 1.180353 | 1.213584 | 1.175746 | 1.155997 | 2.7106632 |
| 3 | rowCumprods(X[cols, rows]) | 1.612751 | 1.561525 | 1.440225 | 1.559034 | 1.527848 | 0.6727893 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+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 | colCumprods_X_S | 1.723 | 1.8920 | 2.14450 | 1.9985 | 2.0530 | 16.670 |
| 2 | rowCumprods_X_S | 1.694 | 1.9545 | 2.26225 | 2.0285 | 2.1635 | 12.304 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCumprods_X_S | 0.9831689 | 1.033034 | 1.054908 | 1.015011 | 1.053824 | 0.7380924 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193493 277.4 8529671 455.6 8529671 455.6
Vcells 9560122 73.0 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193469 277.4 8529671 455.6 8529671 455.6
Vcells 9570175 73.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.012336 | 0.0128960 | 0.0132486 | 0.0131285 | 0.0133315 | 0.022399 |
| 2 | colCumprods(X, rows, cols) | 0.012199 | 0.0130155 | 0.0139613 | 0.0134930 | 0.0138705 | 0.044148 |
| 3 | colCumprods(X[rows, cols]) | 0.028018 | 0.0291685 | 0.0299914 | 0.0294915 | 0.0296575 | 0.054085 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCumprods(X, rows, cols) | 0.9888943 | 1.009266 | 1.053798 | 1.027764 | 1.040431 | 1.970981 |
| 3 | colCumprods(X[rows, cols]) | 2.2712387 | 2.261825 | 2.263747 | 2.246372 | 2.224618 | 2.414617 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+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 | rowCumprods_X_S | 0.016491 | 0.0171385 | 0.0176957 | 0.017725 | 0.0180225 | 0.023410 |
| 2 | rowCumprods(X, cols, rows) | 0.017039 | 0.0177355 | 0.0186849 | 0.018173 | 0.0187380 | 0.043777 |
| 3 | rowCumprods(X[cols, rows]) | 0.031488 | 0.0329055 | 0.0340712 | 0.033576 | 0.0344720 | 0.049186 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 1.033230 | 1.034834 | 1.055899 | 1.025275 | 1.03970 | 1.870013 |
| 3 | rowCumprods(X[cols, rows]) | 1.909405 | 1.919976 | 1.925396 | 1.894274 | 1.91272 | 2.101068 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+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 | colCumprods_X_S | 12.336 | 12.8960 | 13.24858 | 13.1285 | 13.3315 | 22.399 |
| 2 | rowCumprods_X_S | 16.491 | 17.1385 | 17.69571 | 17.7250 | 18.0225 | 23.410 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods_X_S | 1.336819 | 1.328978 | 1.335668 | 1.350116 | 1.351873 | 1.045136 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193692 277.4 8529671 455.6 8529671 455.6
Vcells 9561538 73.0 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193668 277.4 8529671 455.6 8529671 455.6
Vcells 9571591 73.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.013771 | 0.0144340 | 0.0155603 | 0.0145785 | 0.0149540 | 0.028134 |
| 2 | colCumprods(X, rows, cols) | 0.015254 | 0.0161860 | 0.0175489 | 0.0165900 | 0.0168765 | 0.033195 |
| 3 | colCumprods(X[rows, cols]) | 0.030178 | 0.0313385 | 0.0326032 | 0.0315635 | 0.0318470 | 0.062813 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCumprods(X, rows, cols) | 1.107690 | 1.121380 | 1.127797 | 1.137977 | 1.128561 | 1.179889 |
| 3 | colCumprods(X[rows, cols]) | 2.191417 | 2.171158 | 2.095283 | 2.165072 | 2.129664 | 2.232637 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+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 | rowCumprods_X_S | 0.018863 | 0.0197505 | 0.0208456 | 0.0203745 | 0.0211705 | 0.035212 |
| 2 | rowCumprods(X, cols, rows) | 0.022238 | 0.0233740 | 0.0246005 | 0.0243440 | 0.0252385 | 0.040047 |
| 3 | rowCumprods(X[cols, rows]) | 0.036841 | 0.0380115 | 0.0406848 | 0.0395765 | 0.0412700 | 0.081365 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 1.178922 | 1.183464 | 1.180129 | 1.194827 | 1.192154 | 1.137311 |
| 3 | rowCumprods(X[cols, rows]) | 1.953083 | 1.924584 | 1.951724 | 1.942453 | 1.949411 | 2.310718 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+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 | colCumprods_X_S | 13.771 | 14.4340 | 15.56029 | 14.5785 | 14.9540 | 28.134 |
| 2 | rowCumprods_X_S | 18.863 | 19.7505 | 20.84560 | 20.3745 | 21.1705 | 35.212 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods_X_S | 1.369762 | 1.368332 | 1.339667 | 1.397572 | 1.415708 | 1.251582 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193897 277.4 8529671 455.6 8529671 455.6
Vcells 9561674 73.0 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193873 277.4 8529671 455.6 8529671 455.6
Vcells 9571727 73.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.014407 | 0.0149005 | 0.0154546 | 0.0150870 | 0.0152950 | 0.040956 |
| 2 | colCumprods(X, rows, cols) | 0.015947 | 0.0173390 | 0.0186091 | 0.0177910 | 0.0181915 | 0.050309 |
| 3 | colCumprods(X[rows, cols]) | 0.033177 | 0.0347320 | 0.0358207 | 0.0350095 | 0.0354080 | 0.058166 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCumprods(X, rows, cols) | 1.106893 | 1.163652 | 1.204115 | 1.179227 | 1.189376 | 1.228367 |
| 3 | colCumprods(X[rows, cols]) | 2.302839 | 2.330929 | 2.317806 | 2.320508 | 2.315005 | 1.420207 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+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 | rowCumprods_X_S | 0.015177 | 0.0158065 | 0.0161303 | 0.0160155 | 0.0163330 | 0.020969 |
| 2 | rowCumprods(X, cols, rows) | 0.017840 | 0.0186015 | 0.0195433 | 0.0189065 | 0.0191330 | 0.049796 |
| 3 | rowCumprods(X[cols, rows]) | 0.030701 | 0.0319855 | 0.0327561 | 0.0323630 | 0.0334105 | 0.046895 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 1.175463 | 1.176826 | 1.211587 | 1.180513 | 1.171432 | 2.374744 |
| 3 | rowCumprods(X[cols, rows]) | 2.022864 | 2.023566 | 2.030715 | 2.020730 | 2.045583 | 2.236397 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+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 | colCumprods_X_S | 14.407 | 14.9005 | 15.45457 | 15.0870 | 15.295 | 40.956 |
| 2 | rowCumprods_X_S | 15.177 | 15.8065 | 16.13031 | 16.0155 | 16.333 | 20.969 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCumprods_X_S | 1.053446 | 1.060803 | 1.043724 | 1.061543 | 1.067865 | 0.5119885 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5194108 277.4 8529671 455.6 8529671 455.6
Vcells 9607144 73.3 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5194084 277.4 8529671 455.6 8529671 455.6
Vcells 9707197 74.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.077247 | 0.0830300 | 0.0924106 | 0.0881235 | 0.0994515 | 0.138448 |
| 2 | colCumprods(X, rows, cols) | 0.080875 | 0.0880115 | 0.0962571 | 0.0921245 | 0.1035620 | 0.217449 |
| 3 | colCumprods(X[rows, cols]) | 0.188139 | 0.2061475 | 0.2239854 | 0.2153790 | 0.2455685 | 0.298529 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCumprods(X, rows, cols) | 1.046966 | 1.059996 | 1.041624 | 1.045402 | 1.041332 | 1.570619 |
| 3 | colCumprods(X[rows, cols]) | 2.435551 | 2.482807 | 2.423805 | 2.444059 | 2.469229 | 2.156254 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+100x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods(X, cols, rows) | 0.099090 | 0.1048165 | 0.1187806 | 0.1147640 | 0.1244035 | 0.250598 |
| 1 | rowCumprods_X_S | 0.096603 | 0.1103330 | 0.1206186 | 0.1180620 | 0.1296205 | 0.178054 |
| 3 | rowCumprods(X[cols, rows]) | 0.200336 | 0.2136050 | 0.2409966 | 0.2345775 | 0.2572995 | 0.364135 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods(X, cols, rows) | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 1 | rowCumprods_X_S | 0.9749016 | 1.052630 | 1.015473 | 1.028737 | 1.041936 | 0.7105164 |
| 3 | rowCumprods(X[cols, rows]) | 2.0217580 | 2.037895 | 2.028922 | 2.043999 | 2.068266 | 1.4530643 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+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 | colCumprods_X_S | 77.247 | 83.030 | 92.41065 | 88.1235 | 99.4515 | 138.448 |
| 2 | rowCumprods_X_S | 96.603 | 110.333 | 120.61855 | 118.0620 | 129.6205 | 178.054 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods_X_S | 1.250573 | 1.328833 | 1.305245 | 1.339733 | 1.303354 | 1.286071 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> 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]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5194318 277.5 8529671 455.6 8529671 455.6
Vcells 9607285 73.3 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X,
+ rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5194294 277.5 8529671 455.6 8529671 455.6
Vcells 9707338 74.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X,
+ rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.085267 | 0.0931515 | 0.1010496 | 0.0970570 | 0.1044525 | 0.153772 |
| 2 | colCumprods(X, rows, cols) | 0.085064 | 0.0916330 | 0.1016335 | 0.0982665 | 0.1060800 | 0.196777 |
| 3 | colCumprods(X[rows, cols]) | 0.191793 | 0.2081295 | 0.2299603 | 0.2231495 | 0.2477090 | 0.388096 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.0000000 | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCumprods(X, rows, cols) | 0.9976192 | 0.9836986 | 1.005779 | 1.012462 | 1.015581 | 1.279667 |
| 3 | colCumprods(X[rows, cols]) | 2.2493227 | 2.2343118 | 2.275717 | 2.299159 | 2.371499 | 2.523840 |
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+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 | rowCumprods_X_S | 0.108001 | 0.1172790 | 0.1363158 | 0.1340380 | 0.1458500 | 0.187411 |
| 2 | rowCumprods(X, cols, rows) | 0.106519 | 0.1212385 | 0.1372090 | 0.1343805 | 0.1440325 | 0.289116 |
| 3 | rowCumprods(X[cols, rows]) | 0.203520 | 0.2234670 | 0.2569952 | 0.2501560 | 0.2743865 | 0.356161 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 1.000000 |
| 2 | rowCumprods(X, cols, rows) | 0.9862779 | 1.033761 | 1.006552 | 1.002555 | 0.9875386 | 1.542684 |
| 3 | rowCumprods(X[cols, rows]) | 1.8844270 | 1.905431 | 1.885293 | 1.866307 | 1.8812924 | 1.900427 |
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+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 | colCumprods_X_S | 85.267 | 93.1515 | 101.0496 | 97.057 | 104.4525 | 153.772 |
| 2 | rowCumprods_X_S | 108.001 | 117.2790 | 136.3158 | 134.038 | 145.8500 | 187.411 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCumprods_X_S | 1.266621 | 1.259014 | 1.348999 | 1.381023 | 1.396329 | 1.218759 |
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 22.71 secs.
To reproduce this report, do:
html <- matrixStats:::benchmark('colRowCumprods_subset')
Copyright Dongcan Jiang. Last updated on 2021-08-25 18:53:31 (+0200 UTC). Powered by RSP.