colRowMedians_subset - HenrikBengtsson/matrixStats GitHub Wiki
matrixStats: Benchmark report
This report benchmark the performance of colMedians() and rowMedians() 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)> 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 3144507 168.0 5709258 305.0 5709258 305.0
Vcells 6058136 46.3 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3143232 167.9 5709258 305.0 5709258 305.0
Vcells 6054716 46.2 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | colMedians_X_S | 0.001149 | 0.001189 | 0.0015274 | 0.0012160 | 0.0012640 | 0.028063 |
| 2 | colMedians(X, rows, cols) | 0.001316 | 0.001361 | 0.0014472 | 0.0013805 | 0.0014735 | 0.003297 |
| 3 | colMedians(X[rows, cols]) | 0.001647 | 0.001801 | 0.0020915 | 0.0019390 | 0.0020350 | 0.009868 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colMedians(X, rows, cols) | 1.145344 | 1.144659 | 0.947468 | 1.135280 | 1.165744 | 0.1174857 |
| 3 | colMedians(X[rows, cols]) | 1.433420 | 1.514718 | 1.369276 | 1.594572 | 1.609968 | 0.3516374 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.001157 | 0.0011925 | 0.0012899 | 0.0012320 | 0.0013390 | 0.003571 |
| 2 | rowMedians(X, cols, rows) | 0.001319 | 0.0013680 | 0.0017177 | 0.0013925 | 0.0014625 | 0.029867 |
| 3 | rowMedians(X[cols, rows]) | 0.001653 | 0.0018205 | 0.0020435 | 0.0019205 | 0.0020485 | 0.007752 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMedians(X, cols, rows) | 1.140017 | 1.147170 | 1.331617 | 1.130276 | 1.092233 | 8.363764 |
| 3 | rowMedians(X[cols, rows]) | 1.428695 | 1.526625 | 1.584176 | 1.558847 | 1.529873 | 2.170821 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on integer+10x10 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | colMedians_X_S | 1.149 | 1.1890 | 1.52745 | 1.216 | 1.264 | 28.063 |
| 2 | rowMedians_X_S | 1.157 | 1.1925 | 1.28992 | 1.232 | 1.339 | 3.571 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians_X_S | 1.006963 | 1.002944 | 0.8444925 | 1.013158 | 1.059335 | 0.1272494 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3141805 167.8 5709258 305.0 5709258 305.0
Vcells 5722913 43.7 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3141799 167.8 5709258 305.0 5709258 305.0
Vcells 5727996 43.8 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 0.047667 | 0.0489455 | 0.0495067 | 0.049259 | 0.0496840 | 0.059002 |
| 2 | colMedians(X, rows, cols) | 0.050012 | 0.0510530 | 0.0518520 | 0.051677 | 0.0522600 | 0.061308 |
| 3 | colMedians(X[rows, cols]) | 0.056157 | 0.0573060 | 0.0585239 | 0.057716 | 0.0584625 | 0.107428 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMedians(X, rows, cols) | 1.049195 | 1.043058 | 1.047375 | 1.049087 | 1.051848 | 1.039083 |
| 3 | colMedians(X[rows, cols]) | 1.178111 | 1.170812 | 1.182141 | 1.171684 | 1.176687 | 1.820752 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.047473 | 0.0489855 | 0.0496492 | 0.0493975 | 0.0499180 | 0.062526 |
| 2 | rowMedians(X, cols, rows) | 0.050069 | 0.0508580 | 0.0515026 | 0.0514535 | 0.0518740 | 0.055714 |
| 3 | rowMedians(X[cols, rows]) | 0.055391 | 0.0570665 | 0.0583761 | 0.0575520 | 0.0580205 | 0.113789 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians(X, cols, rows) | 1.054684 | 1.038226 | 1.037330 | 1.041621 | 1.039184 | 0.8910533 |
| 3 | rowMedians(X[cols, rows]) | 1.166789 | 1.164967 | 1.175771 | 1.165079 | 1.162316 | 1.8198669 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on integer+100x100 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | colMedians_X_S | 47.667 | 48.9455 | 49.50669 | 49.2590 | 49.684 | 59.002 |
| 2 | rowMedians_X_S | 47.473 | 48.9855 | 49.64924 | 49.3975 | 49.918 | 62.526 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 2 | rowMedians_X_S | 0.9959301 | 1.000817 | 1.002879 | 1.002812 | 1.00471 | 1.059727 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3142560 167.9 5709258 305.0 5709258 305.0
Vcells 5726981 43.7 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3142551 167.9 5709258 305.0 5709258 305.0
Vcells 5732059 43.8 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | colMedians_X_S | 0.033378 | 0.0343820 | 0.0348537 | 0.0346775 | 0.0350340 | 0.044493 |
| 2 | colMedians(X, rows, cols) | 0.035290 | 0.0364185 | 0.0371229 | 0.0367450 | 0.0372535 | 0.066016 |
| 3 | colMedians(X[rows, cols]) | 0.041412 | 0.0424550 | 0.0431284 | 0.0426915 | 0.0432365 | 0.055299 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMedians(X, rows, cols) | 1.057283 | 1.059232 | 1.065107 | 1.059621 | 1.063353 | 1.483739 |
| 3 | colMedians(X[rows, cols]) | 1.240698 | 1.234803 | 1.237412 | 1.231101 | 1.234130 | 1.242870 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.033378 | 0.0346310 | 0.0367103 | 0.0351095 | 0.0360145 | 0.078410 |
| 2 | rowMedians(X, cols, rows) | 0.035982 | 0.0370360 | 0.0399102 | 0.0375655 | 0.0383780 | 0.078175 |
| 3 | rowMedians(X[cols, rows]) | 0.042987 | 0.0437935 | 0.0466722 | 0.0442830 | 0.0451990 | 0.072242 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians(X, cols, rows) | 1.078016 | 1.069446 | 1.087166 | 1.069953 | 1.065626 | 0.9970029 |
| 3 | rowMedians(X[cols, rows]) | 1.287884 | 1.264575 | 1.271365 | 1.261283 | 1.255022 | 0.9213366 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on integer+1000x10 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | colMedians_X_S | 33.378 | 34.382 | 34.85371 | 34.6775 | 35.0340 | 44.493 |
| 2 | rowMedians_X_S | 33.378 | 34.631 | 36.71028 | 35.1095 | 36.0145 | 78.410 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000 |
| 2 | rowMedians_X_S | 1 | 1.007242 | 1.053268 | 1.012458 | 1.027987 | 1.7623 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3142766 167.9 5709258 305.0 5709258 305.0
Vcells 5727864 43.8 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3142757 167.9 5709258 305.0 5709258 305.0
Vcells 5732942 43.8 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | colMedians_X_S | 0.036380 | 0.0381620 | 0.0396042 | 0.0394765 | 0.0408635 | 0.047333 |
| 2 | colMedians(X, rows, cols) | 0.041226 | 0.0434185 | 0.0453140 | 0.0444740 | 0.0458345 | 0.092878 |
| 3 | colMedians(X[rows, cols]) | 0.045252 | 0.0475475 | 0.0488529 | 0.0487825 | 0.0501315 | 0.061149 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMedians(X, rows, cols) | 1.133205 | 1.137742 | 1.144171 | 1.126594 | 1.121649 | 1.962225 |
| 3 | colMedians(X[rows, cols]) | 1.243870 | 1.245938 | 1.233528 | 1.235735 | 1.226804 | 1.291889 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.036450 | 0.038207 | 0.0399224 | 0.039475 | 0.0405905 | 0.077928 |
| 2 | rowMedians(X, cols, rows) | 0.039683 | 0.043051 | 0.0440029 | 0.044060 | 0.0450445 | 0.048454 |
| 3 | rowMedians(X[cols, rows]) | 0.044125 | 0.046707 | 0.0478617 | 0.047529 | 0.0486975 | 0.066379 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians(X, cols, rows) | 1.088697 | 1.126783 | 1.102209 | 1.116149 | 1.109730 | 0.6217791 |
| 3 | rowMedians(X[cols, rows]) | 1.210562 | 1.222472 | 1.198867 | 1.204028 | 1.199726 | 0.8517991 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on integer+10x1000 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | rowMedians_X_S | 36.45 | 38.207 | 39.92242 | 39.4750 | 40.5905 | 77.928 |
| 1 | colMedians_X_S | 36.38 | 38.162 | 39.60422 | 39.4765 | 40.8635 | 47.333 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowMedians_X_S | 1.0000000 | 1.0000000 | 1.0000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colMedians_X_S | 0.9980796 | 0.9988222 | 0.9920295 | 1.000038 | 1.006726 | 0.607394 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3142965 167.9 5709258 305.0 5709258 305.0
Vcells 5750532 43.9 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3142956 167.9 5709258 305.0 5709258 305.0
Vcells 5800610 44.3 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 0.551522 | 0.5533995 | 0.5551663 | 0.554339 | 0.5555935 | 0.602624 |
| 2 | colMedians(X, rows, cols) | 0.570874 | 0.5731625 | 0.5753260 | 0.574361 | 0.5752630 | 0.646639 |
| 3 | colMedians(X[rows, cols]) | 0.624087 | 0.6271425 | 0.6285843 | 0.628093 | 0.6294730 | 0.651826 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMedians(X, rows, cols) | 1.035088 | 1.035712 | 1.036313 | 1.036119 | 1.035403 | 1.073039 |
| 3 | colMedians(X[rows, cols]) | 1.131572 | 1.133255 | 1.132245 | 1.133048 | 1.132974 | 1.081646 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.553368 | 0.5559435 | 0.5584355 | 0.5565935 | 0.5579010 | 0.621667 |
| 2 | rowMedians(X, cols, rows) | 0.583552 | 0.5858350 | 0.5875489 | 0.5866875 | 0.5882505 | 0.614171 |
| 3 | rowMedians(X[cols, rows]) | 0.618907 | 0.6210605 | 0.6246258 | 0.6228175 | 0.6243220 | 0.689644 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians(X, cols, rows) | 1.054546 | 1.053767 | 1.052134 | 1.054068 | 1.054399 | 0.9879421 |
| 3 | rowMedians(X[cols, rows]) | 1.118437 | 1.117129 | 1.118528 | 1.118981 | 1.119055 | 1.1093463 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on integer+100x1000 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 551.522 | 553.3995 | 555.1663 | 554.3390 | 555.5935 | 602.624 |
| 2 | rowMedians_X_S | 553.368 | 555.9435 | 558.4355 | 556.5935 | 557.9010 | 621.667 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000 |
| 2 | rowMedians_X_S | 1.003347 | 1.004597 | 1.005889 | 1.004067 | 1.004153 | 1.0316 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3143181 167.9 5709258 305.0 5709258 305.0
Vcells 5751331 43.9 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3143172 167.9 5709258 305.0 5709258 305.0
Vcells 5801409 44.3 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 0.481554 | 0.4828520 | 0.4842118 | 0.4836605 | 0.4847415 | 0.503828 |
| 2 | colMedians(X, rows, cols) | 0.495361 | 0.4968905 | 0.4980478 | 0.4977890 | 0.4988960 | 0.504501 |
| 3 | colMedians(X[rows, cols]) | 0.545325 | 0.5473575 | 0.5497219 | 0.5482035 | 0.5497545 | 0.643403 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMedians(X, rows, cols) | 1.028672 | 1.029074 | 1.028574 | 1.029212 | 1.029200 | 1.001336 |
| 3 | colMedians(X[rows, cols]) | 1.132427 | 1.133593 | 1.135292 | 1.133447 | 1.134119 | 1.277029 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.492583 | 0.494789 | 0.4974845 | 0.496073 | 0.4982500 | 0.572607 |
| 2 | rowMedians(X, cols, rows) | 0.516114 | 0.518615 | 0.5233134 | 0.519426 | 0.5207715 | 0.660942 |
| 3 | rowMedians(X[cols, rows]) | 0.563463 | 0.567259 | 0.5769345 | 0.569538 | 0.5732690 | 0.908084 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMedians(X, cols, rows) | 1.047771 | 1.048154 | 1.051919 | 1.047076 | 1.045201 | 1.154268 |
| 3 | rowMedians(X[cols, rows]) | 1.143895 | 1.146467 | 1.159703 | 1.148093 | 1.150565 | 1.585876 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on integer+1000x100 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 481.554 | 482.852 | 484.2118 | 483.6605 | 484.7415 | 503.828 |
| 2 | rowMedians_X_S | 492.583 | 494.789 | 497.4845 | 496.0730 | 498.2500 | 572.607 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMedians_X_S | 1.022903 | 1.024722 | 1.027411 | 1.025664 | 1.027867 | 1.136513 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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)> 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 3143399 167.9 5709258 305.0 5709258 305.0
Vcells 5842448 44.6 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3143381 167.9 5709258 305.0 5709258 305.0
Vcells 5842611 44.6 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | colMedians_X_S | 0.001349 | 0.0013760 | 0.0017320 | 0.0014090 | 0.0015340 | 0.023687 |
| 2 | colMedians(X, rows, cols) | 0.001511 | 0.0015630 | 0.0017252 | 0.0015885 | 0.0016965 | 0.006934 |
| 3 | colMedians(X[rows, cols]) | 0.001982 | 0.0022165 | 0.0024541 | 0.0022980 | 0.0024255 | 0.012783 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colMedians(X, rows, cols) | 1.120089 | 1.135901 | 0.9960912 | 1.127395 | 1.105932 | 0.2927344 |
| 3 | colMedians(X[rows, cols]) | 1.469237 | 1.610828 | 1.4169308 | 1.630944 | 1.581160 | 0.5396631 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.001342 | 0.001376 | 0.0015028 | 0.0014180 | 0.0015715 | 0.003560 |
| 2 | rowMedians(X, cols, rows) | 0.001485 | 0.001556 | 0.0019440 | 0.0015845 | 0.0016875 | 0.032230 |
| 3 | rowMedians(X[cols, rows]) | 0.001853 | 0.002102 | 0.0022875 | 0.0021655 | 0.0023025 | 0.008071 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMedians(X, cols, rows) | 1.106557 | 1.130814 | 1.293609 | 1.117419 | 1.073815 | 9.053371 |
| 3 | rowMedians(X[cols, rows]) | 1.380775 | 1.527616 | 1.522172 | 1.527151 | 1.465161 | 2.267135 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on double+10x10 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | colMedians_X_S | 1.349 | 1.376 | 1.73199 | 1.409 | 1.5340 | 23.687 |
| 2 | rowMedians_X_S | 1.342 | 1.376 | 1.50278 | 1.418 | 1.5715 | 3.560 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians_X_S | 0.994811 | 1 | 0.8676609 | 1.006387 | 1.024446 | 0.1502934 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3143598 167.9 5709258 305.0 5709258 305.0
Vcells 5848412 44.7 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3143592 167.9 5709258 305.0 5709258 305.0
Vcells 5858495 44.7 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | colMedians_X_S | 0.085388 | 0.0860420 | 0.0863964 | 0.0862540 | 0.0864435 | 0.092971 |
| 2 | colMedians(X, rows, cols) | 0.087565 | 0.0881975 | 0.0887758 | 0.0884505 | 0.0887785 | 0.105198 |
| 3 | colMedians(X[rows, cols]) | 0.101302 | 0.1019825 | 0.1031859 | 0.1022005 | 0.1027190 | 0.158396 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMedians(X, rows, cols) | 1.025495 | 1.025052 | 1.027541 | 1.025465 | 1.027012 | 1.131514 |
| 3 | colMedians(X[rows, cols]) | 1.186373 | 1.185264 | 1.194331 | 1.184878 | 1.188279 | 1.703714 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.085229 | 0.0861610 | 0.0870892 | 0.0865215 | 0.0869595 | 0.097032 |
| 2 | rowMedians(X, cols, rows) | 0.087775 | 0.0882475 | 0.0893708 | 0.0885260 | 0.0889975 | 0.108774 |
| 3 | rowMedians(X[cols, rows]) | 0.093274 | 0.0938740 | 0.0952150 | 0.0942530 | 0.0947275 | 0.147012 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMedians(X, cols, rows) | 1.029872 | 1.024216 | 1.026198 | 1.023168 | 1.023436 | 1.121012 |
| 3 | rowMedians(X[cols, rows]) | 1.094393 | 1.089519 | 1.093304 | 1.089359 | 1.089329 | 1.515088 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on double+100x100 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | colMedians_X_S | 85.388 | 86.042 | 86.39642 | 86.2540 | 86.4435 | 92.971 |
| 2 | rowMedians_X_S | 85.229 | 86.161 | 87.08921 | 86.5215 | 86.9595 | 97.032 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 2 | rowMedians_X_S | 0.9981379 | 1.001383 | 1.008019 | 1.003101 | 1.005969 | 1.04368 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3143810 167.9 5709258 305.0 5709258 305.0
Vcells 5849857 44.7 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3143801 167.9 5709258 305.0 5709258 305.0
Vcells 5859935 44.8 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | colMedians_X_S | 0.074949 | 0.0757145 | 0.0798286 | 0.076534 | 0.0783235 | 0.134454 |
| 2 | colMedians(X, rows, cols) | 0.077416 | 0.0781150 | 0.0824540 | 0.078691 | 0.0806650 | 0.146220 |
| 3 | colMedians(X[rows, cols]) | 0.090740 | 0.0920850 | 0.0987415 | 0.092853 | 0.0943265 | 0.194842 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMedians(X, rows, cols) | 1.032916 | 1.031705 | 1.032889 | 1.028184 | 1.029895 | 1.087509 |
| 3 | colMedians(X[rows, cols]) | 1.210690 | 1.216214 | 1.236918 | 1.213226 | 1.204319 | 1.449135 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.076189 | 0.0766055 | 0.0779592 | 0.0769240 | 0.0786510 | 0.109868 |
| 2 | rowMedians(X, cols, rows) | 0.078286 | 0.0790835 | 0.0802436 | 0.0796785 | 0.0811865 | 0.094396 |
| 3 | rowMedians(X[cols, rows]) | 0.085653 | 0.0863545 | 0.0877400 | 0.0870785 | 0.0885220 | 0.097734 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians(X, cols, rows) | 1.027524 | 1.032347 | 1.029302 | 1.035808 | 1.032237 | 0.8591765 |
| 3 | rowMedians(X[cols, rows]) | 1.124217 | 1.127262 | 1.125460 | 1.132007 | 1.125504 | 0.8895584 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on double+1000x10 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | colMedians_X_S | 74.949 | 75.7145 | 79.82861 | 76.534 | 78.3235 | 134.454 |
| 2 | rowMedians_X_S | 76.189 | 76.6055 | 77.95923 | 76.924 | 78.6510 | 109.868 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians_X_S | 1.016545 | 1.011768 | 0.9765826 | 1.005096 | 1.004181 | 0.8171419 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3144016 168.0 5709258 305.0 5709258 305.0
Vcells 5849994 44.7 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3144007 168.0 5709258 305.0 5709258 305.0
Vcells 5860072 44.8 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | colMedians_X_S | 0.067270 | 0.0679735 | 0.0688126 | 0.0685890 | 0.069349 | 0.075206 |
| 2 | colMedians(X, rows, cols) | 0.070809 | 0.0722080 | 0.0737420 | 0.0731680 | 0.073613 | 0.121532 |
| 3 | colMedians(X[rows, cols]) | 0.076863 | 0.0778010 | 0.0787147 | 0.0782405 | 0.078900 | 0.092896 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMedians(X, rows, cols) | 1.052609 | 1.062296 | 1.071636 | 1.066760 | 1.061486 | 1.615988 |
| 3 | colMedians(X[rows, cols]) | 1.142604 | 1.144578 | 1.143900 | 1.140715 | 1.137724 | 1.235221 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.067203 | 0.0681190 | 0.0692430 | 0.068694 | 0.0694205 | 0.102883 |
| 2 | rowMedians(X, cols, rows) | 0.070095 | 0.0712345 | 0.0721646 | 0.072028 | 0.0724085 | 0.089288 |
| 3 | rowMedians(X[cols, rows]) | 0.075122 | 0.0764265 | 0.0776169 | 0.077048 | 0.0773895 | 0.100846 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians(X, cols, rows) | 1.043034 | 1.045736 | 1.042193 | 1.048534 | 1.043042 | 0.8678596 |
| 3 | rowMedians(X[cols, rows]) | 1.117837 | 1.121956 | 1.120934 | 1.121612 | 1.114793 | 0.9802008 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on double+10x1000 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | colMedians_X_S | 67.270 | 67.9735 | 68.81259 | 68.589 | 69.3490 | 75.206 |
| 2 | rowMedians_X_S | 67.203 | 68.1190 | 69.24302 | 68.694 | 69.4205 | 102.883 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMedians_X_S | 0.999004 | 1.002141 | 1.006255 | 1.001531 | 1.001031 | 1.368016 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3144215 168 5709258 305.0 5709258 305.0
Vcells 5895472 45 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3144206 168.0 5709258 305.0 5709258 305.0
Vcells 5995550 45.8 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | colMedians_X_S | 0.860940 | 0.8627075 | 0.8645793 | 0.8634910 | 0.8650695 | 0.900853 |
| 2 | colMedians(X, rows, cols) | 0.883786 | 0.8860305 | 0.8922802 | 0.8867275 | 0.8880535 | 0.991335 |
| 3 | colMedians(X[rows, cols]) | 1.009132 | 1.0115570 | 1.0295491 | 1.0128095 | 1.0153515 | 2.127851 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 2 | colMedians(X, rows, cols) | 1.026536 | 1.027035 | 1.032040 | 1.026910 | 1.026569 | 1.10044 |
| 3 | colMedians(X[rows, cols]) | 1.172128 | 1.172538 | 1.190809 | 1.172924 | 1.173723 | 2.36204 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 0.864782 | 0.8669990 | 0.8816675 | 0.8679760 | 0.8710560 | 1.409143 |
| 2 | rowMedians(X, cols, rows) | 0.907987 | 0.9101955 | 0.9178074 | 0.9113740 | 0.9124870 | 1.261388 |
| 3 | rowMedians(X[cols, rows]) | 0.937342 | 0.9469895 | 0.9573683 | 0.9504025 | 0.9558485 | 1.173212 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMedians(X, cols, rows) | 1.049961 | 1.049823 | 1.040990 | 1.049999 | 1.047564 | 0.8951455 |
| 3 | rowMedians(X[cols, rows]) | 1.083905 | 1.092261 | 1.085861 | 1.094964 | 1.097344 | 0.8325713 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on double+100x1000 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | colMedians_X_S | 860.940 | 862.7075 | 864.5793 | 863.491 | 865.0695 | 900.853 |
| 2 | rowMedians_X_S | 864.782 | 866.9990 | 881.6675 | 867.976 | 871.0560 | 1409.143 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 2 | rowMedians_X_S | 1.004463 | 1.004975 | 1.019765 | 1.005194 | 1.00692 | 1.564232 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_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 3144431 168 5709258 305.0 5709258 305.0
Vcells 5895619 45 22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colMedians_X_S = colMedians(X_S, na.rm = FALSE), `colMedians(X, rows, cols)` = colMedians(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMedians(X[rows, cols])` = colMedians(X[rows, cols],
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 3144422 168.0 5709258 305.0 5709258 305.0
Vcells 5995697 45.8 22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowMedians_X_S = rowMedians(X_S, na.rm = FALSE), `rowMedians(X, cols, rows)` = rowMedians(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMedians(X[cols, rows])` = rowMedians(X[cols, rows],
+ na.rm = FALSE), unit = "ms")Table: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(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 | colMedians_X_S | 0.801808 | 0.8047815 | 0.8117196 | 0.806619 | 0.8116600 | 0.859881 |
| 2 | colMedians(X, rows, cols) | 0.821630 | 0.8231540 | 0.8379777 | 0.824381 | 0.8363015 | 1.438840 |
| 3 | colMedians(X[rows, cols]) | 0.874158 | 0.8768455 | 0.8973643 | 0.880392 | 0.8899950 | 1.278850 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 |
| 2 | colMedians(X, rows, cols) | 1.024722 | 1.022829 | 1.032349 | 1.02202 | 1.030359 | 1.673301 |
| 3 | colMedians(X[rows, cols]) | 1.090234 | 1.089545 | 1.105510 | 1.09146 | 1.096512 | 1.487241 |
Table: Benchmarking of rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(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 | rowMedians_X_S | 0.815828 | 0.8178225 | 0.8281364 | 0.8197490 | 0.831868 | 0.940832 |
| 2 | rowMedians(X, cols, rows) | 0.852303 | 0.8542420 | 0.8684241 | 0.8556330 | 0.867120 | 1.145397 |
| 3 | rowMedians(X[cols, rows]) | 0.893871 | 0.9018045 | 0.9235859 | 0.9062475 | 0.917550 | 1.464133 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMedians(X, cols, rows) | 1.044709 | 1.044532 | 1.048649 | 1.043774 | 1.042377 | 1.217430 |
| 3 | rowMedians(X[cols, rows]) | 1.095661 | 1.102690 | 1.115258 | 1.105518 | 1.102999 | 1.556211 |
Figure: Benchmarking of colMedians_X_S(), colMedians(X, rows, cols)() and colMedians(X[rows, cols])() on double+1000x100 data as well as rowMedians_X_S(), rowMedians(X, cols, rows)() and rowMedians(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMedians_X_S() and rowMedians_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 | colMedians_X_S | 801.808 | 804.7815 | 811.7196 | 806.619 | 811.660 | 859.881 |
| 2 | rowMedians_X_S | 815.828 | 817.8225 | 828.1364 | 819.749 | 831.868 | 940.832 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMedians_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMedians_X_S | 1.017486 | 1.016204 | 1.020225 | 1.016278 | 1.024897 | 1.094142 |
Figure: Benchmarking of colMedians_X_S() and rowMedians_X_S() on double+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

R version 3.6.1 Patched (2019-08-27 r77078)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.3 LTS
Matrix products: default
BLAS: /home/hb/software/R-devel/R-3-6-branch/lib/R/lib/libRblas.so
LAPACK: /home/hb/software/R-devel/R-3-6-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-6 matrixStats_0.55.0-9000 ggplot2_3.2.1
[4] knitr_1.24 R.devices_2.16.0 R.utils_2.9.0
[7] R.oo_1.22.0 R.methodsS3_1.7.1 history_0.0.0-9002
loaded via a namespace (and not attached):
[1] Biobase_2.45.0 bit64_0.9-7 splines_3.6.1
[4] network_1.15 assertthat_0.2.1 highr_0.8
[7] stats4_3.6.1 blob_1.2.0 robustbase_0.93-5
[10] pillar_1.4.2 RSQLite_2.1.2 backports_1.1.4
[13] lattice_0.20-38 glue_1.3.1 digest_0.6.20
[16] colorspace_1.4-1 sandwich_2.5-1 Matrix_1.2-17
[19] XML_3.98-1.20 lpSolve_5.6.13.3 pkgconfig_2.0.2
[22] genefilter_1.66.0 purrr_0.3.2 ergm_3.10.4
[25] xtable_1.8-4 mvtnorm_1.0-11 scales_1.0.0
[28] tibble_2.1.3 annotate_1.62.0 IRanges_2.18.2
[31] TH.data_1.0-10 withr_2.1.2 BiocGenerics_0.30.0
[34] lazyeval_0.2.2 mime_0.7 survival_2.44-1.1
[37] magrittr_1.5 crayon_1.3.4 statnet.common_4.3.0
[40] memoise_1.1.0 laeken_0.5.0 R.cache_0.13.0
[43] MASS_7.3-51.4 R.rsp_0.43.1 tools_3.6.1
[46] multcomp_1.4-10 S4Vectors_0.22.1 trust_0.1-7
[49] munsell_0.5.0 AnnotationDbi_1.46.1 compiler_3.6.1
[52] rlang_0.4.0 grid_3.6.1 RCurl_1.95-4.12
[55] cwhmisc_6.6 rappdirs_0.3.1 labeling_0.3
[58] bitops_1.0-6 base64enc_0.1-3 boot_1.3-23
[61] gtable_0.3.0 codetools_0.2-16 DBI_1.0.0
[64] markdown_1.1 R6_2.4.0 zoo_1.8-6
[67] dplyr_0.8.3 bit_1.1-14 zeallot_0.1.0
[70] parallel_3.6.1 Rcpp_1.0.2 vctrs_0.2.0
[73] DEoptimR_1.0-8 tidyselect_0.2.5 xfun_0.9
[76] coda_0.19-3 Total processing time was 24.44 secs.
To reproduce this report, do:
html <- matrixStats:::benchmark('colRowMedians_subset')Copyright Dongcan Jiang. Last updated on 2019-09-10 20:44:30 (-0700 UTC). Powered by RSP.
<script> var link = document.createElement('link'); link.rel = 'icon'; link.href = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAA21BMVEUAAAAAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8BAf4CAv0DA/wdHeIeHuEfH+AgIN8hId4lJdomJtknJ9g+PsE/P8BAQL9yco10dIt1dYp3d4h4eIeVlWqWlmmXl2iYmGeZmWabm2Tn5xjo6Bfp6Rb39wj4+Af//wA2M9hbAAAASXRSTlMAAQIJCgsMJSYnKD4/QGRlZmhpamtsbautrrCxuru8y8zN5ebn6Pn6+///////////////////////////////////////////LsUNcQAAAS9JREFUOI29k21XgkAQhVcFytdSMqMETU26UVqGmpaiFbL//xc1cAhhwVNf6n5i5z67M2dmYOyfJZUqlVLhkKucG7cgmUZTybDz6g0iDeq51PUr37Ds2cy2/C9NeES5puDjxuUk1xnToZsg8pfA3avHQ3lLIi7iWRrkv/OYtkScxBIMgDee0ALoyxHQBJ68JLCjOtQIMIANF7QG9G9fNnHvisCHBVMKgSJgiz7nE+AoBKrAPA3MgepvgR9TSCasrCKH0eB1wBGBFdCO+nAGjMVGPcQb5bd6mQRegN6+1axOs9nGfYcCtfi4NQosdtH7dB+txFIpXQqN1p9B/asRHToyS0jRgpV7nk4nwcq1BJ+x3Gl/v7S9Wmpp/aGquum7w3ZDyrADFYrl8vHBH+ev9AUASW1dmU4h4wAAAABJRU5ErkJggg==" document.getElementsByTagName('head')[0].appendChild(link); </script>