colMads() and rowMads() benchmarks on subsetted computation
This report benchmark the performance of colMads() and rowMads() on subsetted computation.
Data type “integer”
Data
> rmatrix <- function(nrow, ncol, mode = c("logical", "double", "integer", "index"), range = c(-100,
+ +100), na_prob = 0) {
+ mode <- match.arg(mode)
+ n <- nrow * ncol
+ if (mode == "logical") {
+ x <- sample(c(FALSE, TRUE), size = n, replace = TRUE)
+ } else if (mode == "index") {
+ x <- seq_len(n)
+ mode <- "integer"
+ } else {
+ x <- runif(n, min = range[1], max = range[2])
+ }
+ storage.mode(x) <- mode
+ if (na_prob > 0)
+ x[sample(n, size = na_prob * n)] <- NA
+ dim(x) <- c(nrow, ncol)
+ x
+ }
> rmatrices <- function(scale = 10, seed = 1, ...) {
+ set.seed(seed)
+ data <- list()
+ data[[1]] <- rmatrix(nrow = scale * 1, ncol = scale * 1, ...)
+ data[[2]] <- rmatrix(nrow = scale * 10, ncol = scale * 10, ...)
+ data[[3]] <- rmatrix(nrow = scale * 100, ncol = scale * 1, ...)
+ data[[4]] <- t(data[[3]])
+ data[[5]] <- rmatrix(nrow = scale * 10, ncol = scale * 100, ...)
+ data[[6]] <- t(data[[5]])
+ names(data) <- sapply(data, FUN = function(x) paste(dim(x), collapse = "x"))
+ data
+ }
> data <- rmatrices(mode = mode)
Results
10x10 integer matrix
> X <- data[["10x10"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5230613 279.4 8529671 455.6 8529671 455.6
Vcells 10010013 76.4 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5222666 279.0 8529671 455.6 8529671 455.6
Vcells 9983739 76.2 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
colMads_X_S |
0.002897 |
0.0030155 |
0.0058568 |
0.0031005 |
0.0031965 |
0.275000 |
2 |
colMads(X, rows, cols) |
0.003300 |
0.0034380 |
0.0035962 |
0.0035395 |
0.0036545 |
0.006543 |
3 |
colMads(X[rows, cols]) |
0.003731 |
0.0040170 |
0.0043862 |
0.0041550 |
0.0043645 |
0.018293 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.000000 |
1.0000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
colMads(X, rows, cols) |
1.139109 |
1.140109 |
0.6140243 |
1.141590 |
1.143282 |
0.0237927 |
3 |
colMads(X[rows, cols]) |
1.287884 |
1.332117 |
0.7489081 |
1.340106 |
1.365400 |
0.0665200 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
rowMads_X_S |
0.002952 |
0.003079 |
0.0032072 |
0.0031660 |
0.0032480 |
0.006710 |
2 |
rowMads(X, cols, rows) |
0.003306 |
0.003475 |
0.0064096 |
0.0035395 |
0.0036735 |
0.270258 |
3 |
rowMads(X[cols, rows]) |
0.003782 |
0.004016 |
0.0042449 |
0.0041560 |
0.0042925 |
0.007147 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
2 |
rowMads(X, cols, rows) |
1.119919 |
1.128613 |
1.998491 |
1.117972 |
1.131004 |
40.276900 |
3 |
rowMads(X[cols, rows]) |
1.281165 |
1.304320 |
1.323547 |
1.312697 |
1.321583 |
1.065127 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on integer+10x10 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
colMads_X_S |
2.897 |
3.0155 |
5.85682 |
3.1005 |
3.1965 |
275.00 |
2 |
rowMads_X_S |
2.952 |
3.0790 |
3.20720 |
3.1660 |
3.2480 |
6.71 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.000000 |
1.0000000 |
1.000000 |
1.000000 |
1.0000 |
2 |
rowMads_X_S |
1.018985 |
1.021058 |
0.5476009 |
1.021126 |
1.016111 |
0.0244 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on integer+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x100 integer matrix
> X <- data[["100x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5221596 278.9 8529671 455.6 8529671 455.6
Vcells 9652762 73.7 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5221572 278.9 8529671 455.6 8529671 455.6
Vcells 9657815 73.7 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
colMads(X, rows, cols) |
0.133489 |
0.1427000 |
0.1643306 |
0.1620720 |
0.1762455 |
0.229778 |
1 |
colMads_X_S |
0.133940 |
0.1420545 |
0.1653787 |
0.1640340 |
0.1782025 |
0.230007 |
3 |
colMads(X[rows, cols]) |
0.141483 |
0.1520570 |
0.1757110 |
0.1737415 |
0.1913060 |
0.269344 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
colMads(X, rows, cols) |
1.000000 |
1.0000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1 |
colMads_X_S |
1.003379 |
0.9954765 |
1.006378 |
1.012106 |
1.011104 |
1.000997 |
3 |
colMads(X[rows, cols]) |
1.059885 |
1.0655711 |
1.069253 |
1.072002 |
1.085452 |
1.172192 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
2 |
rowMads(X, cols, rows) |
0.134054 |
0.1444445 |
0.1645099 |
0.1610480 |
0.176094 |
0.242336 |
1 |
rowMads_X_S |
0.137631 |
0.1461835 |
0.1689280 |
0.1673675 |
0.183561 |
0.224565 |
3 |
rowMads(X[cols, rows]) |
0.145598 |
0.1560775 |
0.1765251 |
0.1731375 |
0.190183 |
0.239563 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads(X, cols, rows) |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
1 |
rowMads_X_S |
1.026683 |
1.012039 |
1.026856 |
1.039240 |
1.042404 |
0.9266679 |
3 |
rowMads(X[cols, rows]) |
1.086115 |
1.080536 |
1.073036 |
1.075068 |
1.080008 |
0.9885572 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on integer+100x100 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
colMads_X_S |
133.940 |
142.0545 |
165.3787 |
164.0340 |
178.2025 |
230.007 |
2 |
rowMads_X_S |
137.631 |
146.1835 |
168.9280 |
167.3675 |
183.5610 |
224.565 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.00000 |
1.0000000 |
2 |
rowMads_X_S |
1.027557 |
1.029066 |
1.021462 |
1.020322 |
1.03007 |
0.9763399 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on integer+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x10 integer matrix
> X <- data[["1000x10"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5222338 279.0 8529671 455.6 8529671 455.6
Vcells 9656804 73.7 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5222314 279.0 8529671 455.6 8529671 455.6
Vcells 9661857 73.8 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
2 |
colMads(X, rows, cols) |
0.117453 |
0.1247245 |
0.1396233 |
0.1364435 |
0.1481360 |
0.186024 |
1 |
colMads_X_S |
0.115756 |
0.1296875 |
0.1410565 |
0.1382630 |
0.1474685 |
0.207656 |
3 |
colMads(X[rows, cols]) |
0.123733 |
0.1314120 |
0.1472302 |
0.1438235 |
0.1582085 |
0.228173 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
colMads(X, rows, cols) |
1.0000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1 |
colMads_X_S |
0.9855517 |
1.039792 |
1.010265 |
1.013335 |
0.995494 |
1.116286 |
3 |
colMads(X[rows, cols]) |
1.0534682 |
1.053618 |
1.054481 |
1.054088 |
1.067995 |
1.226578 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
rowMads_X_S |
0.119852 |
0.1342820 |
0.1505124 |
0.1431685 |
0.1527535 |
0.251675 |
2 |
rowMads(X, cols, rows) |
0.117795 |
0.1277995 |
0.1474039 |
0.1459425 |
0.1574675 |
0.239278 |
3 |
rowMads(X[cols, rows]) |
0.129588 |
0.1424825 |
0.1649833 |
0.1585315 |
0.1696535 |
0.289764 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowMads_X_S |
1.0000000 |
1.0000000 |
1.0000000 |
1.000000 |
1.000000 |
1.000000 |
2 |
rowMads(X, cols, rows) |
0.9828372 |
0.9517247 |
0.9793474 |
1.019376 |
1.030860 |
0.950742 |
3 |
rowMads(X[cols, rows]) |
1.0812335 |
1.0610692 |
1.0961446 |
1.107307 |
1.110636 |
1.151342 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on integer+1000x10 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
colMads_X_S |
115.756 |
129.6875 |
141.0565 |
138.2630 |
147.4685 |
207.656 |
2 |
rowMads_X_S |
119.852 |
134.2820 |
150.5124 |
143.1685 |
152.7535 |
251.675 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.00000 |
1.000000 |
1.00000 |
2 |
rowMads_X_S |
1.035385 |
1.035427 |
1.067036 |
1.03548 |
1.035838 |
1.21198 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on integer+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

10x1000 integer matrix
> X <- data[["10x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5222542 279.0 8529671 455.6 8529671 455.6
Vcells 9657625 73.7 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5222518 279.0 8529671 455.6 8529671 455.6
Vcells 9662678 73.8 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
2 |
colMads(X, rows, cols) |
0.097614 |
0.1059500 |
0.1156218 |
0.1127260 |
0.1201080 |
0.166373 |
1 |
colMads_X_S |
0.094198 |
0.1038435 |
0.1150566 |
0.1131975 |
0.1245320 |
0.180748 |
3 |
colMads(X[rows, cols]) |
0.107073 |
0.1175900 |
0.1261233 |
0.1231830 |
0.1342685 |
0.166177 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
colMads(X, rows, cols) |
1.000000 |
1.000000 |
1.0000000 |
1.000000 |
1.000000 |
1.0000000 |
1 |
colMads_X_S |
0.965005 |
0.980118 |
0.9951123 |
1.004183 |
1.036833 |
1.0864022 |
3 |
colMads(X[rows, cols]) |
1.096902 |
1.109863 |
1.0908267 |
1.092765 |
1.117898 |
0.9988219 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
2 |
rowMads(X, cols, rows) |
0.102962 |
0.1091030 |
0.1166636 |
0.1124835 |
0.1200705 |
0.195332 |
1 |
rowMads_X_S |
0.107028 |
0.1115420 |
0.1203751 |
0.1161365 |
0.1277905 |
0.155609 |
3 |
rowMads(X[cols, rows]) |
0.116490 |
0.1212795 |
0.1314804 |
0.1262820 |
0.1395350 |
0.187189 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads(X, cols, rows) |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
1 |
rowMads_X_S |
1.039490 |
1.022355 |
1.031813 |
1.032476 |
1.064296 |
0.7966385 |
3 |
rowMads(X[cols, rows]) |
1.131388 |
1.111606 |
1.127004 |
1.122671 |
1.162109 |
0.9583120 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on integer+10x1000 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
1 |
colMads_X_S |
94.198 |
103.8435 |
115.0566 |
113.1975 |
124.5320 |
180.748 |
2 |
rowMads_X_S |
107.028 |
111.5420 |
120.3751 |
116.1365 |
127.7905 |
155.609 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
rowMads_X_S |
1.136203 |
1.074136 |
1.046225 |
1.025964 |
1.026166 |
0.8609169 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on integer+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x1000 integer matrix
> X <- data[["100x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5222755 279.0 8529671 455.6 8529671 455.6
Vcells 9680296 73.9 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5222731 279.0 8529671 455.6 8529671 455.6
Vcells 9730349 74.3 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
colMads_X_S |
1.417719 |
1.630202 |
1.691884 |
1.665612 |
1.692498 |
2.364768 |
2 |
colMads(X, rows, cols) |
1.483859 |
1.632983 |
1.737114 |
1.687781 |
1.754010 |
2.278443 |
3 |
colMads(X[rows, cols]) |
1.498354 |
1.715013 |
1.818983 |
1.776871 |
1.818416 |
2.565856 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
colMads(X, rows, cols) |
1.046652 |
1.001706 |
1.026734 |
1.013310 |
1.036344 |
0.9634954 |
3 |
colMads(X[rows, cols]) |
1.056877 |
1.052024 |
1.075123 |
1.066798 |
1.074397 |
1.0850350 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
2 |
rowMads(X, cols, rows) |
1.506947 |
1.553424 |
1.652926 |
1.599171 |
1.653604 |
2.224853 |
1 |
rowMads_X_S |
1.564443 |
1.585908 |
1.705902 |
1.634154 |
1.723385 |
2.317330 |
3 |
rowMads(X[cols, rows]) |
1.632498 |
1.655447 |
1.795700 |
1.700440 |
1.755014 |
4.476681 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads(X, cols, rows) |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1 |
rowMads_X_S |
1.038154 |
1.020911 |
1.032050 |
1.021876 |
1.042199 |
1.041565 |
3 |
rowMads(X[cols, rows]) |
1.083315 |
1.065676 |
1.086377 |
1.063326 |
1.061327 |
2.012124 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on integer+100x1000 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
rowMads_X_S |
1.564443 |
1.585908 |
1.705902 |
1.634154 |
1.723385 |
2.317330 |
1 |
colMads_X_S |
1.417719 |
1.630202 |
1.691884 |
1.665612 |
1.692498 |
2.364768 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads_X_S |
1.0000000 |
1.00000 |
1.0000000 |
1.00000 |
1.000000 |
1.000000 |
1 |
colMads_X_S |
0.9062133 |
1.02793 |
0.9917825 |
1.01925 |
0.982078 |
1.020471 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on integer+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x100 integer matrix
> X <- data[["1000x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5222965 279.0 8529671 455.6 8529671 455.6
Vcells 9681071 73.9 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5222941 279.0 8529671 455.6 8529671 455.6
Vcells 9731124 74.3 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
colMads(X, rows, cols) |
1.085066 |
1.149720 |
1.208804 |
1.185625 |
1.226300 |
1.643439 |
1 |
colMads_X_S |
1.089497 |
1.184171 |
1.214995 |
1.198657 |
1.223488 |
1.847442 |
3 |
colMads(X[rows, cols]) |
1.154745 |
1.205556 |
1.264744 |
1.261588 |
1.296334 |
1.804970 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
colMads(X, rows, cols) |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
1.000000 |
1 |
colMads_X_S |
1.004084 |
1.029964 |
1.005122 |
1.010991 |
0.9977069 |
1.124132 |
3 |
colMads(X[rows, cols]) |
1.064216 |
1.048564 |
1.046277 |
1.064070 |
1.0571104 |
1.098288 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
2 |
rowMads(X, cols, rows) |
1.105407 |
1.170870 |
1.214940 |
1.201795 |
1.207318 |
1.882349 |
1 |
rowMads_X_S |
1.127465 |
1.203342 |
1.238002 |
1.229418 |
1.237796 |
1.591996 |
3 |
rowMads(X[cols, rows]) |
1.198161 |
1.268891 |
1.305387 |
1.301751 |
1.312086 |
1.874509 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads(X, cols, rows) |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
1 |
rowMads_X_S |
1.019955 |
1.027733 |
1.018981 |
1.022984 |
1.025245 |
0.8457496 |
3 |
rowMads(X[cols, rows]) |
1.083909 |
1.083716 |
1.074445 |
1.083172 |
1.086778 |
0.9958350 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on integer+1000x100 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
colMads_X_S |
1.089497 |
1.184171 |
1.214995 |
1.198657 |
1.223488 |
1.847442 |
2 |
rowMads_X_S |
1.127465 |
1.203342 |
1.238002 |
1.229418 |
1.237796 |
1.591996 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.00000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
rowMads_X_S |
1.034849 |
1.01619 |
1.018935 |
1.025663 |
1.011695 |
0.8617299 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on integer+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

Data type “double”
Data
> rmatrix <- function(nrow, ncol, mode = c("logical", "double", "integer", "index"), range = c(-100,
+ +100), na_prob = 0) {
+ mode <- match.arg(mode)
+ n <- nrow * ncol
+ if (mode == "logical") {
+ x <- sample(c(FALSE, TRUE), size = n, replace = TRUE)
+ } else if (mode == "index") {
+ x <- seq_len(n)
+ mode <- "integer"
+ } else {
+ x <- runif(n, min = range[1], max = range[2])
+ }
+ storage.mode(x) <- mode
+ if (na_prob > 0)
+ x[sample(n, size = na_prob * n)] <- NA
+ dim(x) <- c(nrow, ncol)
+ x
+ }
> rmatrices <- function(scale = 10, seed = 1, ...) {
+ set.seed(seed)
+ data <- list()
+ data[[1]] <- rmatrix(nrow = scale * 1, ncol = scale * 1, ...)
+ data[[2]] <- rmatrix(nrow = scale * 10, ncol = scale * 10, ...)
+ data[[3]] <- rmatrix(nrow = scale * 100, ncol = scale * 1, ...)
+ data[[4]] <- t(data[[3]])
+ data[[5]] <- rmatrix(nrow = scale * 10, ncol = scale * 100, ...)
+ data[[6]] <- t(data[[5]])
+ names(data) <- sapply(data, FUN = function(x) paste(dim(x), collapse = "x"))
+ data
+ }
> data <- rmatrices(mode = mode)
Results
10x10 double matrix
> X <- data[["10x10"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5223183 279.0 8529671 455.6 8529671 455.6
Vcells 9772162 74.6 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5223150 279.0 8529671 455.6 8529671 455.6
Vcells 9772300 74.6 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
colMads_X_S |
0.003726 |
0.0038045 |
0.0042544 |
0.0038940 |
0.0040430 |
0.026198 |
2 |
colMads(X, rows, cols) |
0.004155 |
0.0043660 |
0.0046214 |
0.0044525 |
0.0045435 |
0.011127 |
3 |
colMads(X[rows, cols]) |
0.004658 |
0.0049150 |
0.0051246 |
0.0050410 |
0.0051965 |
0.011186 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
colMads(X, rows, cols) |
1.115137 |
1.147588 |
1.086266 |
1.143426 |
1.123794 |
0.4247271 |
3 |
colMads(X[rows, cols]) |
1.250134 |
1.291891 |
1.204549 |
1.294556 |
1.285308 |
0.4269792 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
rowMads_X_S |
0.003594 |
0.0036745 |
0.0038523 |
0.0038010 |
0.0039325 |
0.006779 |
2 |
rowMads(X, cols, rows) |
0.003975 |
0.0042030 |
0.0045456 |
0.0043055 |
0.0044020 |
0.024302 |
3 |
rowMads(X[cols, rows]) |
0.004466 |
0.0047335 |
0.0050846 |
0.0048645 |
0.0049875 |
0.019734 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
2 |
rowMads(X, cols, rows) |
1.106010 |
1.143829 |
1.179974 |
1.132728 |
1.119390 |
3.584894 |
3 |
rowMads(X[cols, rows]) |
1.242627 |
1.288202 |
1.319877 |
1.279795 |
1.268277 |
2.911049 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on double+10x10 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
2 |
rowMads_X_S |
3.594 |
3.6745 |
3.85229 |
3.801 |
3.9325 |
6.779 |
1 |
colMads_X_S |
3.726 |
3.8045 |
4.25439 |
3.894 |
4.0430 |
26.198 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads_X_S |
1.000000 |
1.000000 |
1.00000 |
1.000000 |
1.000000 |
1.000000 |
1 |
colMads_X_S |
1.036728 |
1.035379 |
1.10438 |
1.024467 |
1.028099 |
3.864582 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on double+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x100 double matrix
> X <- data[["100x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5223381 279.0 8529671 455.6 8529671 455.6
Vcells 9778099 74.7 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5223357 279.0 8529671 455.6 8529671 455.6
Vcells 9788152 74.7 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
colMads_X_S |
0.185069 |
0.1922325 |
0.2081775 |
0.2033905 |
0.2202775 |
0.252736 |
2 |
colMads(X, rows, cols) |
0.185441 |
0.1947715 |
0.2096435 |
0.2038805 |
0.2210425 |
0.280302 |
3 |
colMads(X[rows, cols]) |
0.195130 |
0.2025730 |
0.2222310 |
0.2150940 |
0.2420335 |
0.303092 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
2 |
colMads(X, rows, cols) |
1.002010 |
1.013208 |
1.007042 |
1.002409 |
1.003473 |
1.109070 |
3 |
colMads(X[rows, cols]) |
1.054364 |
1.053792 |
1.067507 |
1.057542 |
1.098766 |
1.199243 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
rowMads_X_S |
0.183997 |
0.1996895 |
0.2176960 |
0.212422 |
0.2309220 |
0.317659 |
2 |
rowMads(X, cols, rows) |
0.185518 |
0.2023970 |
0.2163835 |
0.215181 |
0.2294845 |
0.281491 |
3 |
rowMads(X[cols, rows]) |
0.194266 |
0.2109260 |
0.2262418 |
0.223656 |
0.2390645 |
0.300976 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowMads_X_S |
1.000000 |
1.000000 |
1.0000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
rowMads(X, cols, rows) |
1.008266 |
1.013559 |
0.9939712 |
1.012988 |
0.993775 |
0.8861421 |
3 |
rowMads(X[cols, rows]) |
1.055811 |
1.056270 |
1.0392560 |
1.052885 |
1.035261 |
0.9474814 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on double+100x100 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
colMads_X_S |
185.069 |
192.2325 |
208.1775 |
203.3905 |
220.2775 |
252.736 |
2 |
rowMads_X_S |
183.997 |
199.6895 |
217.6960 |
212.4220 |
230.9220 |
317.659 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.0000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
2 |
rowMads_X_S |
0.9942076 |
1.038792 |
1.045723 |
1.044405 |
1.048323 |
1.256881 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on double+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x10 double matrix
> X <- data[["1000x10"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5223580 279.0 8529671 455.6 8529671 455.6
Vcells 9779494 74.7 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5223556 279.0 8529671 455.6 8529671 455.6
Vcells 9789547 74.7 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
2 |
colMads(X, rows, cols) |
0.175997 |
0.1773025 |
0.2077430 |
0.1962025 |
0.2291455 |
0.291108 |
3 |
colMads(X[rows, cols]) |
0.183437 |
0.1847305 |
0.2166757 |
0.2032115 |
0.2393360 |
0.332860 |
1 |
colMads_X_S |
0.172278 |
0.1781660 |
0.2096855 |
0.2047495 |
0.2254340 |
0.284149 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
colMads(X, rows, cols) |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
1.0000000 |
3 |
colMads(X[rows, cols]) |
1.042273 |
1.041894 |
1.042999 |
1.035723 |
1.0444717 |
1.1434244 |
1 |
colMads_X_S |
0.978869 |
1.004870 |
1.009351 |
1.043562 |
0.9838029 |
0.9760948 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
rowMads_X_S |
0.172019 |
0.1766200 |
0.2047788 |
0.1916175 |
0.2220000 |
0.293810 |
2 |
rowMads(X, cols, rows) |
0.175103 |
0.1777085 |
0.2124895 |
0.2085635 |
0.2366575 |
0.289278 |
3 |
rowMads(X[cols, rows]) |
0.183978 |
0.1897030 |
0.2214018 |
0.2181130 |
0.2410750 |
0.340425 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
rowMads(X, cols, rows) |
1.017928 |
1.006163 |
1.037654 |
1.088437 |
1.066025 |
0.9845751 |
3 |
rowMads(X[cols, rows]) |
1.069521 |
1.074074 |
1.081175 |
1.138273 |
1.085923 |
1.1586570 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on double+1000x10 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
2 |
rowMads_X_S |
172.019 |
176.620 |
204.7788 |
191.6175 |
222.000 |
293.810 |
1 |
colMads_X_S |
172.278 |
178.166 |
209.6855 |
204.7495 |
225.434 |
284.149 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
1 |
colMads_X_S |
1.001506 |
1.008753 |
1.023961 |
1.068532 |
1.015469 |
0.9671182 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on double+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

10x1000 double matrix
> X <- data[["10x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5223784 279.0 8529671 455.6 8529671 455.6
Vcells 9779629 74.7 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5223760 279.0 8529671 455.6 8529671 455.6
Vcells 9789682 74.7 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
2 |
colMads(X, rows, cols) |
0.141589 |
0.1505660 |
0.1690891 |
0.1650760 |
0.1825165 |
0.246319 |
1 |
colMads_X_S |
0.138516 |
0.1474945 |
0.1739136 |
0.1754285 |
0.1910490 |
0.262605 |
3 |
colMads(X[rows, cols]) |
0.151591 |
0.1656825 |
0.1886651 |
0.1861745 |
0.2011445 |
0.290701 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
colMads(X, rows, cols) |
1.0000000 |
1.0000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1 |
colMads_X_S |
0.9782963 |
0.9796003 |
1.028532 |
1.062714 |
1.046749 |
1.066118 |
3 |
colMads(X[rows, cols]) |
1.0706411 |
1.1003978 |
1.115773 |
1.127811 |
1.102062 |
1.180181 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
rowMads_X_S |
0.137422 |
0.1501845 |
0.1723559 |
0.1694125 |
0.185415 |
0.236189 |
2 |
rowMads(X, cols, rows) |
0.140753 |
0.1505595 |
0.1718368 |
0.1725220 |
0.182812 |
0.271620 |
3 |
rowMads(X[cols, rows]) |
0.148459 |
0.1593680 |
0.1851883 |
0.1840025 |
0.201822 |
0.248958 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
1.000000 |
2 |
rowMads(X, cols, rows) |
1.024239 |
1.002497 |
0.996988 |
1.018355 |
0.9859612 |
1.150011 |
3 |
rowMads(X[cols, rows]) |
1.080315 |
1.061148 |
1.074453 |
1.086121 |
1.0884880 |
1.054063 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on double+10x1000 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
2 |
rowMads_X_S |
137.422 |
150.1845 |
172.3559 |
169.4125 |
185.415 |
236.189 |
1 |
colMads_X_S |
138.516 |
147.4945 |
173.9135 |
175.4285 |
191.049 |
262.605 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads_X_S |
1.000000 |
1.0000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1 |
colMads_X_S |
1.007961 |
0.9820887 |
1.009038 |
1.035511 |
1.030386 |
1.111843 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on double+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x1000 double matrix
> X <- data[["100x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5223997 279 8529671 455.6 8529671 455.6
Vcells 9825073 75 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5223973 279.0 8529671 455.6 8529671 455.6
Vcells 9925126 75.8 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
colMads_X_S |
1.875287 |
2.024370 |
2.060110 |
2.032348 |
2.040499 |
3.241494 |
2 |
colMads(X, rows, cols) |
1.872633 |
2.021563 |
2.045685 |
2.033446 |
2.038120 |
3.172565 |
3 |
colMads(X[rows, cols]) |
1.969665 |
2.132613 |
2.175704 |
2.138631 |
2.146966 |
3.166726 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.0000000 |
1.0000000 |
1.000000 |
1.000000 |
1.0000000 |
1.0000000 |
2 |
colMads(X, rows, cols) |
0.9985847 |
0.9986131 |
0.992998 |
1.000540 |
0.9988339 |
0.9787354 |
3 |
colMads(X[rows, cols]) |
1.0503272 |
1.0534695 |
1.056111 |
1.052296 |
1.0521772 |
0.9769341 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
rowMads_X_S |
1.863827 |
2.015923 |
2.076716 |
2.021421 |
2.054693 |
3.223811 |
2 |
rowMads(X, cols, rows) |
1.882677 |
2.040559 |
2.054763 |
2.045401 |
2.058898 |
2.997697 |
3 |
rowMads(X[cols, rows]) |
1.972272 |
2.126524 |
2.168128 |
2.134272 |
2.152099 |
2.893971 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowMads_X_S |
1.000000 |
1.000000 |
1.0000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
rowMads(X, cols, rows) |
1.010114 |
1.012221 |
0.9894288 |
1.011863 |
1.002047 |
0.9298613 |
3 |
rowMads(X[cols, rows]) |
1.058184 |
1.054864 |
1.0440176 |
1.055828 |
1.047407 |
0.8976863 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on double+100x1000 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
2 |
rowMads_X_S |
1.863827 |
2.015923 |
2.076716 |
2.021421 |
2.054693 |
3.223811 |
1 |
colMads_X_S |
1.875287 |
2.024370 |
2.060110 |
2.032348 |
2.040499 |
3.241494 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads_X_S |
1.000000 |
1.00000 |
1.0000000 |
1.000000 |
1.0000000 |
1.000000 |
1 |
colMads_X_S |
1.006149 |
1.00419 |
0.9920035 |
1.005406 |
0.9930919 |
1.005485 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on double+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x100 double matrix
> X <- data[["1000x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5224207 279.1 8529671 455.6 8529671 455.6
Vcells 9825214 75.0 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMads_X_S = colMads(X_S, na.rm = FALSE), `colMads(X, rows, cols)` = colMads(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMads(X[rows, cols])` = colMads(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 5224183 279.1 8529671 455.6 8529671 455.6
Vcells 9925267 75.8 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMads_X_S = rowMads(X_S, na.rm = FALSE), `rowMads(X, cols, rows)` = rowMads(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMads(X[cols, rows])` = rowMads(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(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 |
colMads_X_S |
1.706926 |
1.850517 |
1.887975 |
1.854982 |
1.903505 |
2.812716 |
2 |
colMads(X, rows, cols) |
1.714144 |
1.852256 |
1.896291 |
1.859166 |
1.911118 |
2.640585 |
3 |
colMads(X[rows, cols]) |
1.801265 |
1.944529 |
1.966103 |
1.956179 |
2.001884 |
2.847237 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
colMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.0000000 |
2 |
colMads(X, rows, cols) |
1.004229 |
1.000940 |
1.004405 |
1.002255 |
1.003999 |
0.9388026 |
3 |
colMads(X[rows, cols]) |
1.055268 |
1.050803 |
1.041382 |
1.054554 |
1.051683 |
1.0122732 |
Table: Benchmarking of rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(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 |
rowMads_X_S |
1.701636 |
1.838294 |
1.866937 |
1.846607 |
1.897780 |
2.446870 |
2 |
rowMads(X, cols, rows) |
1.723853 |
1.863206 |
1.907139 |
1.871997 |
1.912233 |
2.926454 |
3 |
rowMads(X[cols, rows]) |
1.802261 |
1.950943 |
1.978890 |
1.961919 |
2.003583 |
2.957204 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
1 |
rowMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
2 |
rowMads(X, cols, rows) |
1.013056 |
1.013552 |
1.021534 |
1.013750 |
1.007616 |
1.195999 |
3 |
rowMads(X[cols, rows]) |
1.059134 |
1.061280 |
1.059966 |
1.062445 |
1.055751 |
1.208566 |
Figure: Benchmarking of colMads_X_S(), colMads(X, rows, cols)() and colMads(X[rows, cols])() on double+1000x100 data as well as rowMads_X_S(), rowMads(X, cols, rows)() and rowMads(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMads_X_S() and rowMads_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 |
2 |
rowMads_X_S |
1.701636 |
1.838294 |
1.866937 |
1.846607 |
1.897780 |
2.446870 |
1 |
colMads_X_S |
1.706926 |
1.850517 |
1.887975 |
1.854982 |
1.903505 |
2.812716 |
|
expr |
min |
lq |
mean |
median |
uq |
max |
2 |
rowMads_X_S |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1 |
colMads_X_S |
1.003109 |
1.006649 |
1.011269 |
1.004536 |
1.003017 |
1.149516 |
Figure: Benchmarking of colMads_X_S() and rowMads_X_S() on double+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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