colRowCumprods_subset - HenrikBengtsson/matrixStats GitHub Wiki

matrixStats: Benchmark report


colCumprods() and rowCumprods() benchmarks on subsetted computation

This report benchmark the performance of colCumprods() and rowCumprods() 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, range = c(-1, 1))

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 3098331 165.5    5709258 305.0  5709258 305.0
Vcells 5726677  43.7   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097491 165.5    5709258 305.0  5709258 305.0
Vcells 5724613  43.7   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.000943 0.0011080 0.0020959 0.0011540 0.0012145 0.092382
2 colCumprods(X, rows, cols) 0.001046 0.0012835 0.0013778 0.0013305 0.0014135 0.002981
3 colCumprods(X[rows, cols]) 0.001413 0.0017795 0.0019528 0.0018725 0.0019895 0.007442
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.0000000 1.000000 1.000000 1.0000000
2 colCumprods(X, rows, cols) 1.109226 1.158394 0.6574120 1.152946 1.163853 0.0322682
3 colCumprods(X[rows, cols]) 1.498409 1.606047 0.9317181 1.622617 1.638123 0.0805568

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+10x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.000909 0.0010860 0.0012022 0.001158 0.0012235 0.002876
2 rowCumprods(X, cols, rows) 0.001094 0.0012835 0.0020782 0.001352 0.0014500 0.070793
3 rowCumprods(X[cols, rows]) 0.001432 0.0017940 0.0019203 0.001887 0.0019925 0.003564
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowCumprods(X, cols, rows) 1.203520 1.181860 1.728652 1.167530 1.185125 24.615090
3 rowCumprods(X[cols, rows]) 1.575357 1.651934 1.597270 1.629534 1.628525 1.239221

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+10x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 943 1108 2095.87 1154 1214.5 92382
2 rowCumprods_X_S 909 1086 1202.22 1158 1223.5 2876
expr min lq mean median uq max
1 colCumprods_X_S 1.0000000 1.0000000 1.0000000 1.000000 1.00000 1.0000000
2 rowCumprods_X_S 0.9639449 0.9801444 0.5736138 1.003466 1.00741 0.0311316

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3096075 165.4    5709258 305.0  5709258 305.0
Vcells 5393454  41.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3096069 165.4    5709258 305.0  5709258 305.0
Vcells 5398537  41.2   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.008881 0.0090770 0.0095852 0.0091425 0.0092520 0.023437
2 colCumprods(X, rows, cols) 0.010862 0.0110650 0.0115328 0.0111875 0.0113035 0.020208
3 colCumprods(X[rows, cols]) 0.016298 0.0166755 0.0175983 0.0168260 0.0170140 0.059456
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
2 colCumprods(X, rows, cols) 1.223061 1.219015 1.203186 1.223681 1.221736 0.8622264
3 colCumprods(X[rows, cols]) 1.835154 1.837116 1.835983 1.840416 1.838954 2.5368435

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+100x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.009459 0.009681 0.0099152 0.0097745 0.0098945 0.013821
2 rowCumprods(X, cols, rows) 0.012302 0.012507 0.0126952 0.0126680 0.0127525 0.015253
3 rowCumprods(X[cols, rows]) 0.017043 0.017234 0.0178813 0.0173760 0.0174960 0.058964
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowCumprods(X, cols, rows) 1.300560 1.291912 1.280374 1.296025 1.288847 1.103610
3 rowCumprods(X[cols, rows]) 1.801776 1.780188 1.803411 1.777687 1.768255 4.266261

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 8.881 9.077 9.58524 9.1425 9.2520 23.437
2 rowCumprods_X_S 9.459 9.681 9.91525 9.7745 9.8945 13.821
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
2 rowCumprods_X_S 1.065083 1.066542 1.034429 1.069128 1.069444 0.5897086

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3096830 165.4    5709258 305.0  5709258 305.0
Vcells 5397527  41.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3096821 165.4    5709258 305.0  5709258 305.0
Vcells 5402605  41.3   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.008879 0.0090310 0.0091919 0.009131 0.0092100 0.012137
2 colCumprods(X, rows, cols) 0.010996 0.0113385 0.0118672 0.011466 0.0115725 0.044242
3 colCumprods(X[rows, cols]) 0.016058 0.0164085 0.0166676 0.016545 0.0166875 0.020173
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 colCumprods(X, rows, cols) 1.238428 1.255509 1.291053 1.255722 1.256515 3.645217
3 colCumprods(X[rows, cols]) 1.808537 1.816908 1.813298 1.811959 1.811889 1.662108

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+1000x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.010637 0.010867 0.0112235 0.0109605 0.0110425 0.027148
2 rowCumprods(X, cols, rows) 0.014605 0.014893 0.0152844 0.0150045 0.0152365 0.029431
3 rowCumprods(X[cols, rows]) 0.019079 0.019348 0.0196167 0.0195270 0.0196945 0.021856
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
2 rowCumprods(X, cols, rows) 1.373037 1.370479 1.361814 1.368961 1.379805 1.0840946
3 rowCumprods(X[cols, rows]) 1.793645 1.780436 1.747820 1.781579 1.783518 0.8050685

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 8.879 9.031 9.19186 9.1310 9.2100 12.137
2 rowCumprods_X_S 10.637 10.867 11.22354 10.9605 11.0425 27.148
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.0000 1.00000 1.000000 1.000000 1.000000
2 rowCumprods_X_S 1.197995 1.2033 1.22103 1.200361 1.198969 2.236797

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3097033 165.4    5709258 305.0  5709258 305.0
Vcells 5398373  41.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097027 165.4    5709258 305.0  5709258 305.0
Vcells 5403456  41.3   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.009560 0.009733 0.0099103 0.0098225 0.0099185 0.013529
2 colCumprods(X, rows, cols) 0.013040 0.013394 0.0140594 0.0135155 0.0136755 0.058081
3 colCumprods(X[rows, cols]) 0.018024 0.018304 0.0187216 0.0184405 0.0186270 0.029221
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 colCumprods(X, rows, cols) 1.364017 1.376143 1.418659 1.375973 1.378787 4.293074
3 colCumprods(X[rows, cols]) 1.885356 1.880612 1.889099 1.877373 1.878006 2.159879

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+10x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.008677 0.0091420 0.0094411 0.0092960 0.0094475 0.025584
2 rowCumprods(X, cols, rows) 0.011571 0.0119865 0.0122191 0.0121580 0.0124000 0.014504
3 rowCumprods(X[cols, rows]) 0.015892 0.0165625 0.0170378 0.0167145 0.0169670 0.031134
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
2 rowCumprods(X, cols, rows) 1.333525 1.311146 1.294241 1.307874 1.312517 0.5669168
3 rowCumprods(X[cols, rows]) 1.831509 1.811693 1.804645 1.798031 1.795925 1.2169325

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+10x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
2 rowCumprods_X_S 8.677 9.142 9.44110 9.2960 9.4475 25.584
1 colCumprods_X_S 9.560 9.733 9.91032 9.8225 9.9185 13.529
expr min lq mean median uq max
2 rowCumprods_X_S 1.000000 1.000000 1.0000 1.000000 1.000000 1.0000000
1 colCumprods_X_S 1.101763 1.064647 1.0497 1.056637 1.049854 0.5288071

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3097232 165.5    5709258 305.0  5709258 305.0
Vcells 5421036  41.4   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097226 165.5    5709258 305.0  5709258 305.0
Vcells 5471119  41.8   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.078206 0.0789305 0.0820328 0.0826030 0.0831015 0.097527
2 colCumprods(X, rows, cols) 0.101258 0.1021430 0.1074809 0.1070615 0.1098300 0.193482
3 colCumprods(X[rows, cols]) 0.149782 0.1511940 0.1580306 0.1581345 0.1620910 0.213764
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 colCumprods(X, rows, cols) 1.294760 1.294088 1.310219 1.296097 1.321637 1.983881
3 colCumprods(X[rows, cols]) 1.915224 1.915533 1.926433 1.914392 1.950518 2.191844

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+100x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.081034 0.0832935 0.0869774 0.0859585 0.0883515 0.118210
2 rowCumprods(X, cols, rows) 0.108651 0.1093705 0.1153381 0.1153560 0.1181200 0.136955
3 rowCumprods(X[cols, rows]) 0.144255 0.1487890 0.1540784 0.1526950 0.1568425 0.206683
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowCumprods(X, cols, rows) 1.340808 1.313074 1.326070 1.341996 1.336933 1.158574
3 rowCumprods(X[cols, rows]) 1.780179 1.786322 1.771476 1.776380 1.775210 1.748439

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 78.206 78.9305 82.03276 82.6030 83.1015 97.527
2 rowCumprods_X_S 81.034 83.2935 86.97738 85.9585 88.3515 118.210
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowCumprods_X_S 1.036161 1.055276 1.060276 1.040622 1.063176 1.212075

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3097448 165.5    5709258 305.0  5709258 305.0
Vcells 5421823  41.4   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097442 165.5    5709258 305.0  5709258 305.0
Vcells 5471906  41.8   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.077828 0.0785115 0.0822036 0.0822755 0.0844955 0.102549
2 colCumprods(X, rows, cols) 0.096794 0.0981950 0.1021855 0.1029425 0.1037880 0.119113
3 colCumprods(X[rows, cols]) 0.141179 0.1425215 0.1490594 0.1489910 0.1529095 0.225731
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 colCumprods(X, rows, cols) 1.243691 1.250709 1.243078 1.251193 1.228326 1.161523
3 colCumprods(X[rows, cols]) 1.813987 1.815295 1.813295 1.810879 1.809676 2.201201

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on integer+1000x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.082362 0.085055 0.0895342 0.089577 0.0922885 0.106258
2 rowCumprods(X, cols, rows) 0.113112 0.119487 0.1224358 0.123335 0.1266285 0.131610
3 rowCumprods(X[cols, rows]) 0.153813 0.158808 0.1666995 0.166861 0.1716135 0.251910
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowCumprods(X, cols, rows) 1.373352 1.404820 1.367474 1.376860 1.372094 1.238589
3 rowCumprods(X[cols, rows]) 1.867524 1.867121 1.861852 1.862766 1.859533 2.370739

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 77.828 78.5115 82.20359 82.2755 84.4955 102.549
2 rowCumprods_X_S 82.362 85.0550 89.53424 89.5770 92.2885 106.258
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.00000 1.000000
2 rowCumprods_X_S 1.058257 1.083344 1.089177 1.088745 1.09223 1.036168

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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, range = c(-1, 1))

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 3097666 165.5    5709258 305.0  5709258 305.0
Vcells 5512933  42.1   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097651 165.5    5709258 305.0  5709258 305.0
Vcells 5513101  42.1   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.000952 0.0011035 0.0013174 0.001158 0.0012605 0.012576
2 colCumprods(X, rows, cols) 0.001028 0.0012710 0.0013775 0.001330 0.0014160 0.003704
3 colCumprods(X[rows, cols]) 0.001731 0.0018940 0.0020436 0.001958 0.0020770 0.006391
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
2 colCumprods(X, rows, cols) 1.079832 1.151790 1.045675 1.148532 1.123364 0.2945293
3 colCumprods(X[rows, cols]) 1.818277 1.716357 1.551327 1.690846 1.647759 0.5081902

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+10x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.000972 0.001156 0.0012820 0.0012175 0.0013085 0.003384
2 rowCumprods(X, cols, rows) 0.001229 0.001334 0.0017182 0.0013735 0.0014920 0.030760
3 rowCumprods(X[cols, rows]) 0.001374 0.001883 0.0020346 0.0019745 0.0020985 0.005897
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowCumprods(X, cols, rows) 1.264403 1.153979 1.340268 1.128131 1.140237 9.089835
3 rowCumprods(X[cols, rows]) 1.413580 1.628893 1.587003 1.621766 1.603745 1.742612

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+10x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 952 1103.5 1317.35 1158.0 1260.5 12576
2 rowCumprods_X_S 972 1156.0 1282.02 1217.5 1308.5 3384
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.00000 1.000000
2 rowCumprods_X_S 1.021008 1.047576 0.973181 1.051382 1.03808 0.269084

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3097868 165.5    5709258 305.0  5709258 305.0
Vcells 5518895  42.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097862 165.5    5709258 305.0  5709258 305.0
Vcells 5528978  42.2   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.004857 0.0053875 0.0061113 0.0061820 0.0065645 0.011150
2 colCumprods(X, rows, cols) 0.006832 0.0073620 0.0078238 0.0076895 0.0079470 0.018924
3 colCumprods(X[rows, cols]) 0.020587 0.0210105 0.0225388 0.0218470 0.0222960 0.064249
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 colCumprods(X, rows, cols) 1.406630 1.366497 1.280210 1.243853 1.210603 1.697220
3 colCumprods(X[rows, cols]) 4.238625 3.899861 3.688028 3.533970 3.396451 5.762242

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+100x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.004630 0.005291 0.0068845 0.006517 0.0068605 0.070451
2 rowCumprods(X, cols, rows) 0.006778 0.007413 0.0077374 0.007658 0.0078810 0.012150
3 rowCumprods(X[cols, rows]) 0.012182 0.012745 0.0142953 0.014028 0.0146400 0.058371
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
2 rowCumprods(X, cols, rows) 1.463931 1.401058 1.123901 1.175081 1.148750 0.1724603
3 rowCumprods(X[cols, rows]) 2.631102 2.408807 2.076465 2.152524 2.133955 0.8285333

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+100x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 4.857 5.3875 6.11134 6.182 6.5645 11.150
2 rowCumprods_X_S 4.630 5.2910 6.88446 6.517 6.8605 70.451
expr min lq mean median uq max
1 colCumprods_X_S 1.0000000 1.0000000 1.000000 1.00000 1.000000 1.000000
2 rowCumprods_X_S 0.9532633 0.9820882 1.126506 1.05419 1.045091 6.318475

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3098077 165.5    5709258 305.0  5709258 305.0
Vcells 5520315  42.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3098071 165.5    5709258 305.0  5709258 305.0
Vcells 5530398  42.2   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.006214 0.0066255 0.0071267 0.0068170 0.0070270 0.030411
2 colCumprods(X, rows, cols) 0.007433 0.0079490 0.0085254 0.0081575 0.0083305 0.037608
3 colCumprods(X[rows, cols]) 0.021876 0.0223045 0.0230152 0.0226300 0.0228200 0.054050
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 colCumprods(X, rows, cols) 1.196170 1.199758 1.196262 1.196641 1.185499 1.236658
3 colCumprods(X[rows, cols]) 3.520438 3.366463 3.229440 3.319642 3.247474 1.777317

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+1000x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.005565 0.0061255 0.0070997 0.0067885 0.0072950 0.037785
2 rowCumprods(X, cols, rows) 0.009015 0.0096460 0.0101746 0.0099080 0.0101445 0.029923
3 rowCumprods(X[cols, rows]) 0.014459 0.0152740 0.0165178 0.0161425 0.0168050 0.047537
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowCumprods(X, cols, rows) 1.619946 1.574729 1.433108 1.459527 1.390610 0.791928
3 rowCumprods(X[cols, rows]) 2.598203 2.493511 2.326552 2.377918 2.303633 1.258092

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+1000x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
2 rowCumprods_X_S 5.565 6.1255 7.09970 6.7885 7.295 37.785
1 colCumprods_X_S 6.214 6.6255 7.12669 6.8170 7.027 30.411
expr min lq mean median uq max
2 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.0000000 1.0000000
1 colCumprods_X_S 1.116622 1.081626 1.003802 1.004198 0.9632625 0.8048432

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3098283 165.5    5709258 305.0  5709258 305.0
Vcells 5520452  42.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3098277 165.5    5709258 305.0  5709258 305.0
Vcells 5530535  42.2   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.004489 0.0051910 0.0061553 0.0063625 0.0066715 0.011010
2 colCumprods(X, rows, cols) 0.008567 0.0091035 0.0101483 0.0093015 0.0095055 0.053090
3 colCumprods(X[rows, cols]) 0.013335 0.0145385 0.0158261 0.0157695 0.0163460 0.022723
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.00000 1.000000 1.000000 1.000000
2 colCumprods(X, rows, cols) 1.908443 1.753708 1.64870 1.461925 1.424792 4.821980
3 colCumprods(X[rows, cols]) 2.970595 2.800713 2.57112 2.478507 2.450124 2.063851

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+10x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.004419 0.0049675 0.0063573 0.0060880 0.0064325 0.038899
2 rowCumprods(X, cols, rows) 0.006921 0.0073630 0.0079872 0.0075575 0.0078140 0.038926
3 rowCumprods(X[cols, rows]) 0.011858 0.0129355 0.0141958 0.0143140 0.0146425 0.029884
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowCumprods(X, cols, rows) 1.566191 1.482234 1.256380 1.241377 1.214769 1.000694
3 rowCumprods(X[cols, rows]) 2.683413 2.604026 2.232982 2.351183 2.276331 0.768246

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+10x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
2 rowCumprods_X_S 4.419 4.9675 6.35733 6.0880 6.4325 38.899
1 colCumprods_X_S 4.489 5.1910 6.15533 6.3625 6.6715 11.010
expr min lq mean median uq max
2 rowCumprods_X_S 1.000000 1.000000 1.0000000 1.000000 1.000000 1.0000000
1 colCumprods_X_S 1.015841 1.044992 0.9682257 1.045089 1.037155 0.2830407

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3098482 165.5    5709258 305.0  5709258 305.0
Vcells 5565906  42.5   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3098476 165.5    5709258 305.0  5709258 305.0
Vcells 5665989  43.3   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.040681 0.0427140 0.0850630 0.0489350 0.1441715 0.184042
2 colCumprods(X, rows, cols) 0.065642 0.0667155 0.1099405 0.0777160 0.1707740 0.678898
3 colCumprods(X[rows, cols]) 0.191395 0.1951510 0.3153127 0.2191255 0.3987120 4.575217
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.00000 1.000000
2 colCumprods(X, rows, cols) 1.613579 1.561912 1.292460 1.588148 1.18452 3.688821
3 colCumprods(X[rows, cols]) 4.704776 4.568783 3.706815 4.477889 2.76554 24.859635

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+100x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.033487 0.0350245 0.0388241 0.036631 0.0388215 0.084922
2 rowCumprods(X, cols, rows) 0.057095 0.0576420 0.0624490 0.058124 0.0622650 0.143848
3 rowCumprods(X[cols, rows]) 0.108312 0.1105250 0.1695680 0.111465 0.1151470 5.556977
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowCumprods(X, cols, rows) 1.704990 1.645762 1.608510 1.586744 1.603879 1.693884
3 rowCumprods(X[cols, rows]) 3.234449 3.155648 4.367598 3.042915 2.966063 65.436247

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+100x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
2 rowCumprods_X_S 33.487 35.0245 38.82409 36.631 38.8215 84.922
1 colCumprods_X_S 40.681 42.7140 85.06298 48.935 144.1715 184.042
expr min lq mean median uq max
2 rowCumprods_X_S 1.00000 1.000000 1.000000 1.00000 1.000000 1.000000
1 colCumprods_X_S 1.21483 1.219546 2.190984 1.33589 3.713703 2.167189

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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 3098698 165.5    5709258 305.0  5709258 305.0
Vcells 5566053  42.5   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3098692 165.5    5709258 305.0  5709258 305.0
Vcells 5666136  43.3   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")

Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 colCumprods_X_S 0.065734 0.0665525 0.0691468 0.0670175 0.0709305 0.088035
2 colCumprods(X, rows, cols) 0.074532 0.0750390 0.1148334 0.0752925 0.0759400 3.874134
3 colCumprods(X[rows, cols]) 0.134556 0.1359320 0.1425392 0.1368215 0.1444270 0.278853
expr min lq mean median uq max
1 colCumprods_X_S 1.000000 1.000000 1.00000 1.000000 1.000000 1.000000
2 colCumprods(X, rows, cols) 1.133843 1.127516 1.66072 1.123475 1.070626 44.006747
3 colCumprods(X[rows, cols]) 2.046977 2.042478 2.06140 2.041579 2.036176 3.167524

Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on double+1000x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
1 rowCumprods_X_S 0.052424 0.053742 0.0943576 0.0545095 0.0570295 3.809591
2 rowCumprods(X, cols, rows) 0.079854 0.080920 0.0835950 0.0813700 0.0846615 0.162819
3 rowCumprods(X[cols, rows]) 0.131606 0.133867 0.1397911 0.1351145 0.1398330 0.262065
expr min lq mean median uq max
1 rowCumprods_X_S 1.000000 1.000000 1.0000000 1.000000 1.000000 1.0000000
2 rowCumprods(X, cols, rows) 1.523234 1.505713 0.8859385 1.492767 1.484521 0.0427392
3 rowCumprods(X[cols, rows]) 2.510415 2.490920 1.4815027 2.478733 2.451942 0.0687908

Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+1000x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.

expr min lq mean median uq max
2 rowCumprods_X_S 52.424 53.7420 94.35762 54.5095 57.0295 3809.591
1 colCumprods_X_S 65.734 66.5525 69.14678 67.0175 70.9305 88.035
expr min lq mean median uq max
2 rowCumprods_X_S 1.000000 1.00000 1.0000000 1.000000 1.000000 1.0000000
1 colCumprods_X_S 1.253891 1.23837 0.7328161 1.229465 1.243751 0.0231088

Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

Appendix

Session information

R version 3.6.1 Patched (2019-08-27 r77078)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.3 LTS

Matrix products: default
BLAS:   /home/hb/software/R-devel/R-3-6-branch/lib/R/lib/libRblas.so
LAPACK: /home/hb/software/R-devel/R-3-6-branch/lib/R/lib/libRlapack.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] microbenchmark_1.4-6    matrixStats_0.55.0-9000 ggplot2_3.2.1          
[4] knitr_1.24              R.devices_2.16.0        R.utils_2.9.0          
[7] R.oo_1.22.0             R.methodsS3_1.7.1       history_0.0.0-9002     

loaded via a namespace (and not attached):
 [1] Biobase_2.45.0       bit64_0.9-7          splines_3.6.1       
 [4] network_1.15         assertthat_0.2.1     highr_0.8           
 [7] stats4_3.6.1         blob_1.2.0           robustbase_0.93-5   
[10] pillar_1.4.2         RSQLite_2.1.2        backports_1.1.4     
[13] lattice_0.20-38      glue_1.3.1           digest_0.6.20       
[16] colorspace_1.4-1     sandwich_2.5-1       Matrix_1.2-17       
[19] XML_3.98-1.20        lpSolve_5.6.13.3     pkgconfig_2.0.2     
[22] genefilter_1.66.0    purrr_0.3.2          ergm_3.10.4         
[25] xtable_1.8-4         mvtnorm_1.0-11       scales_1.0.0        
[28] tibble_2.1.3         annotate_1.62.0      IRanges_2.18.2      
[31] TH.data_1.0-10       withr_2.1.2          BiocGenerics_0.30.0 
[34] lazyeval_0.2.2       mime_0.7             survival_2.44-1.1   
[37] magrittr_1.5         crayon_1.3.4         statnet.common_4.3.0
[40] memoise_1.1.0        laeken_0.5.0         R.cache_0.13.0      
[43] MASS_7.3-51.4        R.rsp_0.43.1         tools_3.6.1         
[46] multcomp_1.4-10      S4Vectors_0.22.1     trust_0.1-7         
[49] munsell_0.5.0        AnnotationDbi_1.46.1 compiler_3.6.1      
[52] rlang_0.4.0          grid_3.6.1           RCurl_1.95-4.12     
[55] cwhmisc_6.6          rappdirs_0.3.1       labeling_0.3        
[58] bitops_1.0-6         base64enc_0.1-3      boot_1.3-23         
[61] gtable_0.3.0         codetools_0.2-16     DBI_1.0.0           
[64] markdown_1.1         R6_2.4.0             zoo_1.8-6           
[67] dplyr_0.8.3          bit_1.1-14           zeallot_0.1.0       
[70] parallel_3.6.1       Rcpp_1.0.2           vctrs_0.2.0         
[73] DEoptimR_1.0-8       tidyselect_0.2.5     xfun_0.9            
[76] coda_0.19-3         

Total processing time was 22.61 secs.

Reproducibility

To reproduce this report, do:

html <- matrixStats:::benchmark('colRowCumprods_subset')

Copyright Dongcan Jiang. Last updated on 2019-09-10 20:38:38 (-0700 UTC). Powered by RSP.

<script> var link = document.createElement('link'); link.rel = 'icon'; link.href = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAA21BMVEUAAAAAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8BAf4CAv0DA/wdHeIeHuEfH+AgIN8hId4lJdomJtknJ9g+PsE/P8BAQL9yco10dIt1dYp3d4h4eIeVlWqWlmmXl2iYmGeZmWabm2Tn5xjo6Bfp6Rb39wj4+Af//wA2M9hbAAAASXRSTlMAAQIJCgsMJSYnKD4/QGRlZmhpamtsbautrrCxuru8y8zN5ebn6Pn6+///////////////////////////////////////////LsUNcQAAAS9JREFUOI29k21XgkAQhVcFytdSMqMETU26UVqGmpaiFbL//xc1cAhhwVNf6n5i5z67M2dmYOyfJZUqlVLhkKucG7cgmUZTybDz6g0iDeq51PUr37Ds2cy2/C9NeES5puDjxuUk1xnToZsg8pfA3avHQ3lLIi7iWRrkv/OYtkScxBIMgDee0ALoyxHQBJ68JLCjOtQIMIANF7QG9G9fNnHvisCHBVMKgSJgiz7nE+AoBKrAPA3MgepvgR9TSCasrCKH0eB1wBGBFdCO+nAGjMVGPcQb5bd6mQRegN6+1axOs9nGfYcCtfi4NQosdtH7dB+txFIpXQqN1p9B/asRHToyS0jRgpV7nk4nwcq1BJ+x3Gl/v7S9Wmpp/aGquum7w3ZDyrADFYrl8vHBH+ev9AUASW1dmU4h4wAAAABJRU5ErkJggg==" document.getElementsByTagName('head')[0].appendChild(link); </script>
⚠️ **GitHub.com Fallback** ⚠️