This report benchmark the performance of colLogSumExps() and rowLogSumExps() against alternative methods.
where
> logSumExp0 <- function(lx, ...) {
+ iMax <- which.max(lx)
+ log1p(sum(exp(lx[-iMax] - lx[iMax]))) + lx[iMax]
+ }
> 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"]]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5228971 279.3 8529671 455.6 8529671 455.6
Vcells 10151080 77.5 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colLogSumExps = colLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 2L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 2L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5219380 278.8 8529671 455.6 8529671 455.6
Vcells 10119728 77.3 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowLogSumExps = rowLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 1L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 1L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 0.004115 | 0.0047255 | 0.0053071 | 0.0051590 | 0.0055450 | 0.018341 |
| 2 | apply+logSumExp | 0.043589 | 0.0460690 | 0.0493210 | 0.0475195 | 0.0500855 | 0.142218 |
| 3 | apply+logSumExp0 | 0.061030 | 0.0631095 | 0.0672718 | 0.0643335 | 0.0690305 | 0.166412 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.00000 | 1.000000 | 1.00000 | 1.00000 | 1.000000 | 1.000000 |
| 2 | apply+logSumExp | 10.59271 | 9.749021 | 9.29344 | 9.21099 | 9.032552 | 7.754103 |
| 3 | apply+logSumExp0 | 14.83111 | 13.355095 | 12.67586 | 12.47015 | 12.449143 | 9.073224 |
Table: Benchmarking of rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 0.004288 | 0.0047920 | 0.0054875 | 0.0053690 | 0.0057515 | 0.018216 |
| 2 | apply+logSumExp | 0.043553 | 0.0463765 | 0.0488194 | 0.0480420 | 0.0497345 | 0.104476 |
| 3 | apply+logSumExp0 | 0.058941 | 0.0627360 | 0.0676865 | 0.0657705 | 0.0689620 | 0.156978 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | apply+logSumExp | 10.15695 | 9.677901 | 8.896548 | 8.948035 | 8.647222 | 5.735398 |
| 3 | apply+logSumExp0 | 13.74557 | 13.091820 | 12.334767 | 12.250047 | 11.990263 | 8.617589 |
Figure: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() on 10x10 data as well as rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps() and rowLogSumExps() on 10x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 4.115 | 4.7255 | 5.30708 | 5.159 | 5.5450 | 18.341 |
| 2 | rowLogSumExps | 4.288 | 4.7920 | 5.48746 | 5.369 | 5.7515 | 18.216 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowLogSumExps | 1.042041 | 1.014073 | 1.033989 | 1.040706 | 1.037241 | 0.9931847 |
Figure: Benchmarking of colLogSumExps() and rowLogSumExps() on 10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x100"]]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5217958 278.7 8529671 455.6 8529671 455.6
Vcells 9736343 74.3 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colLogSumExps = colLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 2L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 2L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5217934 278.7 8529671 455.6 8529671 455.6
Vcells 9746356 74.4 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowLogSumExps = rowLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 1L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 1L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 0.157921 | 0.1673080 | 0.1806528 | 0.1727235 | 0.1869930 | 0.289930 |
| 2 | apply+logSumExp | 0.382036 | 0.3999075 | 0.4347645 | 0.4173075 | 0.4505250 | 0.644744 |
| 3 | apply+logSumExp0 | 0.543190 | 0.5626970 | 0.6222792 | 0.5895445 | 0.6450365 | 1.022007 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | apply+logSumExp | 2.419159 | 2.390247 | 2.406630 | 2.416044 | 2.409315 | 2.223792 |
| 3 | apply+logSumExp0 | 3.439631 | 3.363240 | 3.444615 | 3.413227 | 3.449522 | 3.525013 |
Table: Benchmarking of rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 0.165548 | 0.1703945 | 0.1902944 | 0.1811930 | 0.1951185 | 0.294609 |
| 2 | apply+logSumExp | 0.380418 | 0.4002895 | 0.4395488 | 0.4142425 | 0.4495775 | 0.687410 |
| 3 | apply+logSumExp0 | 0.542032 | 0.5688875 | 0.6197588 | 0.5908095 | 0.6360910 | 1.152939 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | apply+logSumExp | 2.297932 | 2.349193 | 2.309836 | 2.286195 | 2.304125 | 2.333296 |
| 3 | apply+logSumExp0 | 3.274168 | 3.338649 | 3.256842 | 3.260664 | 3.260024 | 3.913455 |
Figure: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() on 100x100 data as well as rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps() and rowLogSumExps() on 100x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 157.921 | 167.3080 | 180.6528 | 172.7235 | 186.9930 | 289.930 |
| 2 | rowLogSumExps | 165.548 | 170.3945 | 190.2944 | 181.1930 | 195.1185 | 294.609 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowLogSumExps | 1.048296 | 1.018448 | 1.053371 | 1.049035 | 1.043454 | 1.016138 |
Figure: Benchmarking of colLogSumExps() and rowLogSumExps() on 100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x10"]]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5218689 278.8 8529671 455.6 8529671 455.6
Vcells 9740091 74.4 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colLogSumExps = colLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 2L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 2L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5218683 278.8 8529671 455.6 8529671 455.6
Vcells 9750134 74.4 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowLogSumExps = rowLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 1L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 1L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 0.154186 | 0.158505 | 0.1814515 | 0.172183 | 0.2007125 | 0.265225 |
| 2 | apply+logSumExp | 0.228059 | 0.233735 | 0.2634239 | 0.247757 | 0.2804950 | 0.469100 |
| 3 | apply+logSumExp0 | 0.270533 | 0.277889 | 0.3147685 | 0.298207 | 0.3446450 | 0.448955 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | apply+logSumExp | 1.479116 | 1.474622 | 1.451759 | 1.438917 | 1.397496 | 1.768687 |
| 3 | apply+logSumExp0 | 1.754589 | 1.753188 | 1.734725 | 1.731919 | 1.717108 | 1.692733 |
Table: Benchmarking of rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 0.161690 | 0.1670955 | 0.1943217 | 0.1870175 | 0.2125375 | 0.270339 |
| 2 | apply+logSumExp | 0.228044 | 0.2328070 | 0.2652763 | 0.2485140 | 0.2892600 | 0.459792 |
| 3 | apply+logSumExp0 | 0.271421 | 0.2770635 | 0.3082615 | 0.2944350 | 0.3266250 | 0.434325 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | apply+logSumExp | 1.410378 | 1.393257 | 1.365140 | 1.328828 | 1.360983 | 1.700798 |
| 3 | apply+logSumExp0 | 1.678651 | 1.658115 | 1.586346 | 1.574371 | 1.536788 | 1.606594 |
Figure: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() on 1000x10 data as well as rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps() and rowLogSumExps() 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 | 154.186 | 158.5050 | 181.4515 | 172.1830 | 200.7125 | 265.225 |
| 2 | rowLogSumExps | 161.690 | 167.0955 | 194.3217 | 187.0175 | 212.5375 | 270.339 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowLogSumExps | 1.048669 | 1.054197 | 1.070929 | 1.086155 | 1.058915 | 1.019282 |
Figure: Benchmarking of colLogSumExps() and rowLogSumExps() on 1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["10x1000"]]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5218920 278.8 8529671 455.6 8529671 455.6
Vcells 9740933 74.4 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colLogSumExps = colLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 2L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 2L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5218896 278.8 8529671 455.6 8529671 455.6
Vcells 9750946 74.4 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowLogSumExps = rowLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 1L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 1L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 0.190061 | 0.211368 | 0.2199596 | 0.217669 | 0.2249845 | 0.283629 |
| 2 | apply+logSumExp | 1.764354 | 1.991289 | 2.1139157 | 2.046578 | 2.1101505 | 6.844011 |
| 3 | apply+logSumExp0 | 2.993370 | 3.385412 | 3.5302578 | 3.515979 | 3.6096990 | 8.362414 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 2 | apply+logSumExp | 9.283093 | 9.420955 | 9.610475 | 9.402248 | 9.379093 | 24.13015 |
| 3 | apply+logSumExp0 | 15.749522 | 16.016670 | 16.049577 | 16.152867 | 16.044212 | 29.48364 |
Table: Benchmarking of rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 0.194062 | 0.2169925 | 0.2291399 | 0.224315 | 0.231641 | 0.335443 |
| 2 | apply+logSumExp | 1.777240 | 1.9722690 | 2.0639333 | 2.024551 | 2.115266 | 3.554903 |
| 3 | apply+logSumExp0 | 3.024545 | 3.3911160 | 3.5965822 | 3.481692 | 3.643680 | 8.478938 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 2 | apply+logSumExp | 9.158104 | 9.089111 | 9.007306 | 9.025482 | 9.131656 | 10.59764 |
| 3 | apply+logSumExp0 | 15.585457 | 15.627803 | 15.696009 | 15.521443 | 15.729856 | 25.27684 |
Figure: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() on 10x1000 data as well as rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps() and rowLogSumExps() on 10x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 190.061 | 211.3680 | 219.9596 | 217.669 | 224.9845 | 283.629 |
| 2 | rowLogSumExps | 194.062 | 216.9925 | 229.1399 | 224.315 | 231.6410 | 335.443 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowLogSumExps | 1.021051 | 1.02661 | 1.041737 | 1.030533 | 1.029586 | 1.182682 |
Figure: Benchmarking of colLogSumExps() and rowLogSumExps() on 10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x1000"]]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5219106 278.8 8529671 455.6 8529671 455.6
Vcells 9741475 74.4 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colLogSumExps = colLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 2L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 2L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5219100 278.8 8529671 455.6 8529671 455.6
Vcells 9841518 75.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowLogSumExps = rowLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 1L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 1L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 1.624391 | 1.801557 | 1.831439 | 1.812264 | 1.841316 | 2.302175 |
| 2 | apply+logSumExp | 3.776501 | 4.174838 | 4.484965 | 4.217352 | 4.271068 | 25.059164 |
| 3 | apply+logSumExp0 | 5.371786 | 5.919493 | 6.429257 | 5.985990 | 6.074941 | 27.184728 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 2 | apply+logSumExp | 2.324872 | 2.317349 | 2.448875 | 2.327118 | 2.319573 | 10.88500 |
| 3 | apply+logSumExp0 | 3.306954 | 3.285764 | 3.510495 | 3.303046 | 3.299238 | 11.80828 |
Table: Benchmarking of rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 1.752514 | 1.911463 | 1.957864 | 1.923861 | 1.958441 | 2.867753 |
| 2 | apply+logSumExp | 3.780918 | 4.187303 | 4.473450 | 4.231286 | 4.299059 | 25.509167 |
| 3 | apply+logSumExp0 | 5.396677 | 5.923896 | 6.441987 | 5.986849 | 6.092803 | 26.030105 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | apply+logSumExp | 2.157425 | 2.190627 | 2.284862 | 2.199371 | 2.195143 | 8.895176 |
| 3 | apply+logSumExp0 | 3.079392 | 3.099142 | 3.290314 | 3.111892 | 3.111047 | 9.076830 |
Figure: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() on 100x1000 data as well as rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps() and rowLogSumExps() 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 | 1.624391 | 1.801557 | 1.831439 | 1.812264 | 1.841316 | 2.302175 |
| 2 | rowLogSumExps | 1.752514 | 1.911463 | 1.957864 | 1.923861 | 1.958441 | 2.867753 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 2 | rowLogSumExps | 1.078874 | 1.061006 | 1.069031 | 1.061579 | 1.06361 | 1.245671 |
Figure: Benchmarking of colLogSumExps() and rowLogSumExps() on 100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x100"]]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5219312 278.8 8529671 455.6 8529671 455.6
Vcells 9742136 74.4 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colLogSumExps = colLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 2L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 2L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5219306 278.8 8529671 455.6 8529671 455.6
Vcells 9842179 75.1 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowLogSumExps = rowLogSumExps(X, na.rm = FALSE), `apply+logSumExp` = apply(X,
+ MARGIN = 1L, FUN = logSumExp, na.rm = FALSE), `apply+logSumExp0` = apply(X, MARGIN = 1L, FUN = logSumExp0,
+ na.rm = FALSE), unit = "ms")
Table: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 1.517303 | 1.733855 | 1.773318 | 1.779090 | 1.800228 | 2.310471 |
| 2 | apply+logSumExp | 2.216948 | 2.432158 | 2.553887 | 2.474226 | 2.508740 | 10.567098 |
| 3 | apply+logSumExp0 | 2.592625 | 2.825159 | 3.043045 | 2.875790 | 2.923199 | 11.135143 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | apply+logSumExp | 1.461111 | 1.402746 | 1.440174 | 1.390725 | 1.393568 | 4.573569 |
| 3 | apply+logSumExp0 | 1.708706 | 1.629409 | 1.716017 | 1.616438 | 1.623794 | 4.819426 |
Table: Benchmarking of rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() 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 | 1.610505 | 1.838343 | 1.878647 | 1.893433 | 1.907017 | 2.480900 |
| 2 | apply+logSumExp | 2.181577 | 2.453104 | 2.513237 | 2.514174 | 2.556699 | 3.612257 |
| 3 | apply+logSumExp0 | 2.651415 | 2.857989 | 3.184226 | 2.938034 | 3.005631 | 11.197049 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 2 | apply+logSumExp | 1.354592 | 1.334411 | 1.337791 | 1.327839 | 1.34068 | 1.456027 |
| 3 | apply+logSumExp0 | 1.646325 | 1.554655 | 1.694957 | 1.551697 | 1.57609 | 4.513301 |
Figure: Benchmarking of colLogSumExps(), apply+logSumExp() and apply+logSumExp0() on 1000x100 data as well as rowLogSumExps(), apply+logSumExp() and apply+logSumExp0() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colLogSumExps() and rowLogSumExps() 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 | 1.517303 | 1.733855 | 1.773318 | 1.779090 | 1.800228 | 2.310471 |
| 2 | rowLogSumExps | 1.610505 | 1.838343 | 1.878647 | 1.893433 | 1.907017 | 2.480900 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colLogSumExps | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.00000 | 1.000000 |
| 2 | rowLogSumExps | 1.061426 | 1.060263 | 1.059396 | 1.06427 | 1.05932 | 1.073764 |
Figure: Benchmarking of colLogSumExps() and rowLogSumExps() 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.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 16.57 secs.
To reproduce this report, do:
html <- matrixStats:::benchmark('colLogSumExps')
Copyright Henrik Bengtsson. Last updated on 2021-08-25 18:56:13 (+0200 UTC). Powered by RSP.