This report benchmark the performance of colLogSumExps() and rowLogSumExps() 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 = "double")
> 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 5238049 279.8 7916910 422.9 7916910 422.9
Vcells 10108692 77.2 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colLogSumExps_X_S = colLogSumExps(X_S, na.rm = FALSE), `colLogSumExps(X, rows, cols)` = colLogSumExps(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colLogSumExps(X[rows, cols])` = colLogSumExps(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 5225312 279.1 7916910 422.9 7916910 422.9
Vcells 10066514 76.9 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowLogSumExps_X_S = rowLogSumExps(X_S, na.rm = FALSE), `rowLogSumExps(X, cols, rows)` = rowLogSumExps(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowLogSumExps(X[cols, rows])` = rowLogSumExps(X[cols,
+ rows], na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 0.007115 | 0.0073195 | 0.0101712 | 0.0074750 | 0.0076295 | 0.236078 |
| 2 | colLogSumExps(X, rows, cols) | 0.007420 | 0.0077625 | 0.0083343 | 0.0079385 | 0.0081360 | 0.021503 |
| 3 | colLogSumExps(X[rows, cols]) | 0.008110 | 0.0087055 | 0.0090248 | 0.0088625 | 0.0090620 | 0.018043 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colLogSumExps(X, rows, cols) | 1.042867 | 1.060523 | 0.8194032 | 1.062007 | 1.066387 | 0.0910843 |
| 3 | colLogSumExps(X[rows, cols]) | 1.139845 | 1.189357 | 0.8872928 | 1.185619 | 1.187758 | 0.0764281 |
Table: Benchmarking of rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on 10x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 0.005605 | 0.005921 | 0.0062526 | 0.0060105 | 0.0061855 | 0.019133 |
| 2 | rowLogSumExps(X, cols, rows) | 0.006106 | 0.006320 | 0.0084117 | 0.0064450 | 0.0066540 | 0.181226 |
| 3 | rowLogSumExps(X[cols, rows]) | 0.006688 | 0.007062 | 0.0079129 | 0.0072195 | 0.0074580 | 0.020867 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowLogSumExps(X, cols, rows) | 1.089384 | 1.067387 | 1.345314 | 1.072290 | 1.075742 | 9.471907 |
| 3 | rowLogSumExps(X[cols, rows]) | 1.193220 | 1.192704 | 1.265544 | 1.201148 | 1.205723 | 1.090629 |
Figure: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 10x10 data as well as rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 10x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowLogSumExps_X_S | 5.605 | 5.9210 | 6.25260 | 6.0105 | 6.1855 | 19.133 |
| 1 | colLogSumExps_X_S | 7.115 | 7.3195 | 10.17122 | 7.4750 | 7.6295 | 236.078 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 1 | colLogSumExps_X_S | 1.269402 | 1.236193 | 1.626718 | 1.243657 | 1.233449 | 12.33879 |
Figure: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 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 5224037 279.0 7916910 422.9 7916910 422.9
Vcells 9737400 74.3 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colLogSumExps_X_S = colLogSumExps(X_S, na.rm = FALSE), `colLogSumExps(X, rows, cols)` = colLogSumExps(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colLogSumExps(X[rows, cols])` = colLogSumExps(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 5224031 279.0 7916910 422.9 7916910 422.9
Vcells 9747483 74.4 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowLogSumExps_X_S = rowLogSumExps(X_S, na.rm = FALSE), `rowLogSumExps(X, cols, rows)` = rowLogSumExps(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowLogSumExps(X[cols, rows])` = rowLogSumExps(X[cols,
+ rows], na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 0.092659 | 0.0982260 | 0.1071898 | 0.1045055 | 0.1167345 | 0.137236 |
| 2 | colLogSumExps(X, rows, cols) | 0.104962 | 0.1109100 | 0.1214687 | 0.1166815 | 0.1329395 | 0.164765 |
| 3 | colLogSumExps(X[rows, cols]) | 0.105212 | 0.1115215 | 0.1222706 | 0.1174300 | 0.1334405 | 0.189864 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colLogSumExps(X, rows, cols) | 1.132777 | 1.129131 | 1.133212 | 1.116511 | 1.138819 | 1.200596 |
| 3 | colLogSumExps(X[rows, cols]) | 1.135475 | 1.135356 | 1.140693 | 1.123673 | 1.143111 | 1.383485 |
Table: Benchmarking of rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on 100x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 0.092408 | 0.097453 | 0.1067365 | 0.1025205 | 0.1155995 | 0.134108 |
| 2 | rowLogSumExps(X, cols, rows) | 0.100721 | 0.107351 | 0.1175832 | 0.1146055 | 0.1246125 | 0.178518 |
| 3 | rowLogSumExps(X[cols, rows]) | 0.105402 | 0.110651 | 0.1206870 | 0.1169775 | 0.1279125 | 0.163867 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowLogSumExps(X, cols, rows) | 1.089960 | 1.101567 | 1.101621 | 1.117879 | 1.077967 | 1.331151 |
| 3 | rowLogSumExps(X[cols, rows]) | 1.140616 | 1.135429 | 1.130700 | 1.141016 | 1.106514 | 1.221903 |
Figure: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 100x100 data as well as rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 100x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowLogSumExps_X_S | 92.408 | 97.453 | 106.7365 | 102.5205 | 115.5995 | 134.108 |
| 1 | colLogSumExps_X_S | 92.659 | 98.226 | 107.1898 | 104.5055 | 116.7345 | 137.236 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colLogSumExps_X_S | 1.002716 | 1.007932 | 1.004247 | 1.019362 | 1.009818 | 1.023324 |
Figure: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 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 5224778 279.1 7916910 422.9 7916910 422.9
Vcells 9741449 74.4 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colLogSumExps_X_S = colLogSumExps(X_S, na.rm = FALSE), `colLogSumExps(X, rows, cols)` = colLogSumExps(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colLogSumExps(X[rows, cols])` = colLogSumExps(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 5224772 279.1 7916910 422.9 7916910 422.9
Vcells 9751532 74.4 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowLogSumExps_X_S = rowLogSumExps(X_S, na.rm = FALSE), `rowLogSumExps(X, cols, rows)` = rowLogSumExps(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowLogSumExps(X[cols, rows])` = rowLogSumExps(X[cols,
+ rows], na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 0.081337 | 0.0878975 | 0.0918830 | 0.0917245 | 0.0936210 | 0.134037 |
| 3 | colLogSumExps(X[rows, cols]) | 0.090477 | 0.0974915 | 0.1047085 | 0.1023490 | 0.1074920 | 0.166081 |
| 2 | colLogSumExps(X, rows, cols) | 0.091705 | 0.1020535 | 0.1065506 | 0.1056700 | 0.1096165 | 0.132534 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 3 | colLogSumExps(X[rows, cols]) | 1.112372 | 1.109150 | 1.139585 | 1.115831 | 1.148161 | 1.2390683 |
| 2 | colLogSumExps(X, rows, cols) | 1.127470 | 1.161051 | 1.159633 | 1.152037 | 1.170854 | 0.9887867 |
Table: Benchmarking of rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on 1000x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 0.089144 | 0.0936680 | 0.1016918 | 0.0985455 | 0.1077120 | 0.134465 |
| 2 | rowLogSumExps(X, cols, rows) | 0.095979 | 0.1018065 | 0.1105511 | 0.1076820 | 0.1195335 | 0.140813 |
| 3 | rowLogSumExps(X[cols, rows]) | 0.105246 | 0.1092500 | 0.1196410 | 0.1164450 | 0.1283870 | 0.210126 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowLogSumExps(X, cols, rows) | 1.076674 | 1.086887 | 1.087119 | 1.092713 | 1.109751 | 1.047209 |
| 3 | rowLogSumExps(X[cols, rows]) | 1.180629 | 1.166354 | 1.176506 | 1.181637 | 1.191947 | 1.562682 |
Figure: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 1000x10 data as well as rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 1000x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 81.337 | 87.8975 | 91.88296 | 91.7245 | 93.621 | 134.037 |
| 2 | rowLogSumExps_X_S | 89.144 | 93.6680 | 101.69176 | 98.5455 | 107.712 | 134.465 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowLogSumExps_X_S | 1.095983 | 1.06565 | 1.106753 | 1.074364 | 1.150511 | 1.003193 |
Figure: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 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 5224982 279.1 7916910 422.9 7916910 422.9
Vcells 9742375 74.4 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colLogSumExps_X_S = colLogSumExps(X_S, na.rm = FALSE), `colLogSumExps(X, rows, cols)` = colLogSumExps(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colLogSumExps(X[rows, cols])` = colLogSumExps(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 5224976 279.1 7916910 422.9 7916910 422.9
Vcells 9752458 74.5 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowLogSumExps_X_S = rowLogSumExps(X_S, na.rm = FALSE), `rowLogSumExps(X, cols, rows)` = rowLogSumExps(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowLogSumExps(X[cols, rows])` = rowLogSumExps(X[cols,
+ rows], na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 0.105838 | 0.1169940 | 0.1325966 | 0.1280575 | 0.1437870 | 0.199453 |
| 3 | colLogSumExps(X[rows, cols]) | 0.121829 | 0.1324750 | 0.1430677 | 0.1380670 | 0.1509265 | 0.210831 |
| 2 | colLogSumExps(X, rows, cols) | 0.119458 | 0.1310025 | 0.1445732 | 0.1394405 | 0.1508250 | 0.214062 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | colLogSumExps(X[rows, cols]) | 1.151089 | 1.132323 | 1.078969 | 1.078164 | 1.049653 | 1.057046 |
| 2 | colLogSumExps(X, rows, cols) | 1.128687 | 1.119737 | 1.090323 | 1.088890 | 1.048947 | 1.073245 |
Table: Benchmarking of rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on 10x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 0.107426 | 0.1172715 | 0.1286174 | 0.1229725 | 0.1376535 | 0.169853 |
| 3 | rowLogSumExps(X[cols, rows]) | 0.116121 | 0.1300935 | 0.1426984 | 0.1354825 | 0.1564030 | 0.179422 |
| 2 | rowLogSumExps(X, cols, rows) | 0.119500 | 0.1299565 | 0.1421029 | 0.1384615 | 0.1486940 | 0.214896 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowLogSumExps(X[cols, rows]) | 1.080939 | 1.109336 | 1.10948 | 1.101730 | 1.136208 | 1.056337 |
| 2 | rowLogSumExps(X, cols, rows) | 1.112394 | 1.108168 | 1.10485 | 1.125955 | 1.080205 | 1.265188 |
Figure: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 10x1000 data as well as rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 10x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowLogSumExps_X_S | 107.426 | 117.2715 | 128.6174 | 122.9725 | 137.6535 | 169.853 |
| 1 | colLogSumExps_X_S | 105.838 | 116.9940 | 132.5966 | 128.0575 | 143.7870 | 199.453 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowLogSumExps_X_S | 1.0000000 | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colLogSumExps_X_S | 0.9852177 | 0.9976337 | 1.030938 | 1.041351 | 1.044558 | 1.174268 |
Figure: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 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 5225195 279.1 7916910 422.9 7916910 422.9
Vcells 9787108 74.7 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colLogSumExps_X_S = colLogSumExps(X_S, na.rm = FALSE), `colLogSumExps(X, rows, cols)` = colLogSumExps(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colLogSumExps(X[rows, cols])` = colLogSumExps(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 5225189 279.1 7916910 422.9 7916910 422.9
Vcells 9887191 75.5 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowLogSumExps_X_S = rowLogSumExps(X_S, na.rm = FALSE), `rowLogSumExps(X, cols, rows)` = rowLogSumExps(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowLogSumExps(X[cols, rows])` = rowLogSumExps(X[cols,
+ rows], na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 0.732019 | 0.8122615 | 0.8815236 | 0.908237 | 0.931889 | 1.290778 |
| 3 | colLogSumExps(X[rows, cols]) | 0.824849 | 0.9041215 | 1.1203326 | 1.052028 | 1.148853 | 9.666148 |
| 2 | colLogSumExps(X, rows, cols) | 0.823153 | 0.9286710 | 1.0548352 | 1.101485 | 1.165216 | 1.408639 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | colLogSumExps(X[rows, cols]) | 1.126814 | 1.113092 | 1.270905 | 1.158319 | 1.232821 | 7.488622 |
| 2 | colLogSumExps(X, rows, cols) | 1.124497 | 1.143315 | 1.196605 | 1.212773 | 1.250381 | 1.091310 |
Table: Benchmarking of rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on 100x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 0.763864 | 0.8275575 | 1.010433 | 0.9387495 | 0.9760135 | 9.037269 |
| 3 | rowLogSumExps(X[cols, rows]) | 0.864047 | 0.9813495 | 1.105827 | 1.1447305 | 1.1737865 | 1.552095 |
| 2 | rowLogSumExps(X, cols, rows) | 0.886787 | 1.0083610 | 1.112867 | 1.1510915 | 1.1868720 | 1.548171 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 3 | rowLogSumExps(X[cols, rows]) | 1.131153 | 1.185838 | 1.094408 | 1.219421 | 1.202633 | 0.1717438 |
| 2 | rowLogSumExps(X, cols, rows) | 1.160923 | 1.218479 | 1.101376 | 1.226197 | 1.216041 | 0.1713096 |
Figure: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 100x1000 data as well as rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 100x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 732.019 | 812.2615 | 881.5236 | 908.2370 | 931.8890 | 1290.778 |
| 2 | rowLogSumExps_X_S | 763.864 | 827.5575 | 1010.4334 | 938.7495 | 976.0135 | 9037.269 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowLogSumExps_X_S | 1.043503 | 1.018831 | 1.146235 | 1.033595 | 1.047349 | 7.001412 |
Figure: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 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 5225405 279.1 7916910 422.9 7916910 422.9
Vcells 9787933 74.7 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colLogSumExps_X_S = colLogSumExps(X_S, na.rm = FALSE), `colLogSumExps(X, rows, cols)` = colLogSumExps(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colLogSumExps(X[rows, cols])` = colLogSumExps(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 5225399 279.1 7916910 422.9 7916910 422.9
Vcells 9888016 75.5 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowLogSumExps_X_S = rowLogSumExps(X_S, na.rm = FALSE), `rowLogSumExps(X, cols, rows)` = rowLogSumExps(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowLogSumExps(X[cols, rows])` = rowLogSumExps(X[cols,
+ rows], na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 0.678350 | 0.8307220 | 0.9314281 | 0.855903 | 0.8693755 | 8.881709 |
| 3 | colLogSumExps(X[rows, cols]) | 0.782717 | 0.8763665 | 0.9949185 | 1.027352 | 1.0821845 | 1.706902 |
| 2 | colLogSumExps(X, rows, cols) | 0.810869 | 0.9047975 | 1.0430200 | 1.100774 | 1.1264285 | 1.288961 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 3 | colLogSumExps(X[rows, cols]) | 1.153854 | 1.054946 | 1.068165 | 1.200314 | 1.244784 | 0.1921817 |
| 2 | colLogSumExps(X, rows, cols) | 1.195355 | 1.089170 | 1.119807 | 1.286097 | 1.295675 | 0.1451253 |
Table: Benchmarking of rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on 1000x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 0.714063 | 0.8154905 | 0.9628592 | 0.903113 | 0.9221925 | 9.277656 |
| 2 | rowLogSumExps(X, cols, rows) | 0.824174 | 0.9135890 | 1.0372638 | 1.095503 | 1.1237030 | 1.350762 |
| 3 | rowLogSumExps(X[cols, rows]) | 0.827792 | 0.9571870 | 1.0576103 | 1.106101 | 1.1349945 | 1.556035 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowLogSumExps(X, cols, rows) | 1.154203 | 1.120294 | 1.077275 | 1.213029 | 1.218512 | 0.1455930 |
| 3 | rowLogSumExps(X[cols, rows]) | 1.159270 | 1.173756 | 1.098406 | 1.224765 | 1.230757 | 0.1677185 |
Figure: Benchmarking of colLogSumExps_X_S(), colLogSumExps(X, rows, cols)() and colLogSumExps(X[rows, cols])() on 1000x100 data as well as rowLogSumExps_X_S(), rowLogSumExps(X, cols, rows)() and rowLogSumExps(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 1000x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 678.350 | 830.7220 | 931.4281 | 855.903 | 869.3755 | 8881.709 |
| 2 | rowLogSumExps_X_S | 714.063 | 815.4905 | 962.8592 | 903.113 | 922.1925 | 9277.656 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps_X_S | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 2 | rowLogSumExps_X_S | 1.052647 | 0.9816647 | 1.033745 | 1.055158 | 1.060753 | 1.04458 |
Figure: Benchmarking of colLogSumExps_X_S() and rowLogSumExps_X_S() on 1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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