matrixStats.benchmarks


colWeightedMeans() and rowWeightedMeans() benchmarks on subsetted computation

This report benchmark the performance of colWeightedMeans() and rowWeightedMeans() on subsetted computation.

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 = "double")

Results

10x10 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]
> w <- runif(nrow(X))
> w_S <- w[rows]
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5327688 284.6    7916910 422.9  7916910 422.9
Vcells 10777907  82.3   33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colWeightedMeans_X_w_S = colWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `colWeightedMeans(X, w, rows, cols)` = colWeightedMeans(X, w = w, rows = rows, cols = cols, na.rm = FALSE), 
+     `colWeightedMeans(X[rows, cols], w[rows])` = colWeightedMeans(X[rows, cols], w = w[rows], na.rm = FALSE), 
+     unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5328008 284.6    7916910 422.9  7916910 422.9
Vcells 10778913  82.3   33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowWeightedMeans_X_w_S = rowWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `rowWeightedMeans(X, w, cols, rows)` = rowWeightedMeans(X, w = w, rows = cols, cols = rows, na.rm = FALSE), 
+     `rowWeightedMeans(X[cols, rows], w[rows])` = rowWeightedMeans(X[cols, rows], w = w[rows], na.rm = FALSE), 
+     unit = "ms")

Table: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() 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 colWeightedMeans_X_w_S 0.015171 0.0158180 0.0163423 0.0160910 0.016316 0.027558
3 colWeightedMeans(X[rows, cols], w[rows]) 0.017381 0.0179435 0.0185034 0.0181375 0.018412 0.034587
2 colWeightedMeans(X, w, rows, cols) 0.018913 0.0193955 0.0246758 0.0196560 0.019909 0.504739
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 colWeightedMeans(X[rows, cols], w[rows]) 1.145673 1.134372 1.132238 1.127183 1.128463 1.255062
2 colWeightedMeans(X, w, rows, cols) 1.246655 1.226166 1.509933 1.221552 1.220213 18.315516

Table: Benchmarking of rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[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 rowWeightedMeans_X_w_S 0.019012 0.0201135 0.0215431 0.0203670 0.0214005 0.034597
3 rowWeightedMeans(X[cols, rows], w[rows]) 0.020468 0.0219490 0.0247819 0.0227865 0.0261800 0.057266
2 rowWeightedMeans(X, w, cols, rows) 0.022483 0.0239145 0.0323603 0.0243945 0.0277340 0.631384
  expr min lq mean median uq max
1 rowWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.00000
3 rowWeightedMeans(X[cols, rows], w[rows]) 1.076583 1.091257 1.150340 1.118795 1.223336 1.65523
2 rowWeightedMeans(X, w, cols, rows) 1.182569 1.188978 1.502122 1.197746 1.295951 18.24967

Figure: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() on 10x10 data as well as rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_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
1 colWeightedMeans_X_w_S 15.171 15.8180 16.34232 16.091 16.3160 27.558
2 rowWeightedMeans_X_w_S 19.012 20.1135 21.54308 20.367 21.4005 34.597
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.00000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowWeightedMeans_X_w_S 1.25318 1.271558 1.318239 1.265739 1.311627 1.255425

Figure: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_S() on 10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x100 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]
> w <- runif(nrow(X))
> w_S <- w[rows]
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5327177 284.6    7916910 422.9  7916910 422.9
Vcells 10449688  79.8   33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colWeightedMeans_X_w_S = colWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `colWeightedMeans(X, w, rows, cols)` = colWeightedMeans(X, w = w, rows = rows, cols = cols, na.rm = FALSE), 
+     `colWeightedMeans(X[rows, cols], w[rows])` = colWeightedMeans(X[rows, cols], w = w[rows], na.rm = FALSE), 
+     unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5327171 284.6    7916910 422.9  7916910 422.9
Vcells 10459771  79.9   33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowWeightedMeans_X_w_S = rowWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `rowWeightedMeans(X, w, cols, rows)` = rowWeightedMeans(X, w = w, rows = cols, cols = rows, na.rm = FALSE), 
+     `rowWeightedMeans(X[cols, rows], w[rows])` = rowWeightedMeans(X[cols, rows], w = w[rows], na.rm = FALSE), 
+     unit = "ms")

Table: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() 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 colWeightedMeans_X_w_S 0.029270 0.0316210 0.0329605 0.0321040 0.033290 0.053265
3 colWeightedMeans(X[rows, cols], w[rows]) 0.046053 0.0494960 0.0507809 0.0501865 0.051381 0.073676
2 colWeightedMeans(X, w, rows, cols) 0.061366 0.0665215 0.0686374 0.0674395 0.069121 0.131850
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 colWeightedMeans(X[rows, cols], w[rows]) 1.573386 1.565289 1.540660 1.563248 1.543437 1.383197
2 colWeightedMeans(X, w, rows, cols) 2.096549 2.103713 2.082418 2.100657 2.076329 2.475359

Table: Benchmarking of rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[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 rowWeightedMeans_X_w_S 0.074601 0.0780525 0.0887749 0.086913 0.098268 0.116026
3 rowWeightedMeans(X[cols, rows], w[rows]) 0.088196 0.0930250 0.1051482 0.102477 0.113152 0.204930
2 rowWeightedMeans(X, w, cols, rows) 0.102206 0.1074345 0.1196216 0.116328 0.130697 0.159276
  expr min lq mean median uq max
1 rowWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 rowWeightedMeans(X[cols, rows], w[rows]) 1.182236 1.191826 1.184436 1.179076 1.151463 1.766242
2 rowWeightedMeans(X, w, cols, rows) 1.370035 1.376439 1.347472 1.338442 1.330006 1.372761

Figure: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() on 100x100 data as well as rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_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
1 colWeightedMeans_X_w_S 29.270 31.6210 32.96046 32.104 33.290 53.265
2 rowWeightedMeans_X_w_S 74.601 78.0525 88.77487 86.913 98.268 116.026
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowWeightedMeans_X_w_S 2.548719 2.468375 2.693375 2.707233 2.951877 2.178278

Figure: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_S() on 100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x10 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]
> w <- runif(nrow(X))
> w_S <- w[rows]
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5327927 284.6    7916910 422.9  7916910 422.9
Vcells 10455614  79.8   33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colWeightedMeans_X_w_S = colWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `colWeightedMeans(X, w, rows, cols)` = colWeightedMeans(X, w = w, rows = rows, cols = cols, na.rm = FALSE), 
+     `colWeightedMeans(X[rows, cols], w[rows])` = colWeightedMeans(X[rows, cols], w = w[rows], na.rm = FALSE), 
+     unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5327921 284.6    7916910 422.9  7916910 422.9
Vcells 10465697  79.9   33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowWeightedMeans_X_w_S = rowWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `rowWeightedMeans(X, w, cols, rows)` = rowWeightedMeans(X, w = w, rows = cols, cols = rows, na.rm = FALSE), 
+     `rowWeightedMeans(X[cols, rows], w[rows])` = rowWeightedMeans(X[cols, rows], w = w[rows], na.rm = FALSE), 
+     unit = "ms")

Table: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() 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 colWeightedMeans_X_w_S 0.038916 0.0417615 0.0443260 0.0440560 0.0466310 0.058755
3 colWeightedMeans(X[rows, cols], w[rows]) 0.056890 0.0600515 0.0641121 0.0636985 0.0675890 0.080929
2 colWeightedMeans(X, w, rows, cols) 0.075096 0.0796090 0.0849957 0.0845720 0.0891025 0.156608
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 colWeightedMeans(X[rows, cols], w[rows]) 1.461867 1.437963 1.446378 1.445853 1.449444 1.377398
2 colWeightedMeans(X, w, rows, cols) 1.929695 1.906277 1.917515 1.919648 1.910800 2.665441

Table: Benchmarking of rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[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 rowWeightedMeans_X_w_S 0.084563 0.0883740 0.0956230 0.0913750 0.1061175 0.119929
3 rowWeightedMeans(X[cols, rows], w[rows]) 0.102313 0.1069370 0.1178380 0.1142950 0.1300995 0.140903
2 rowWeightedMeans(X, w, cols, rows) 0.119662 0.1268015 0.1400416 0.1361275 0.1521595 0.237710
  expr min lq mean median uq max
1 rowWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 rowWeightedMeans(X[cols, rows], w[rows]) 1.209903 1.210050 1.232319 1.250835 1.225995 1.174887
2 rowWeightedMeans(X, w, cols, rows) 1.415063 1.434828 1.464517 1.489767 1.433877 1.982089

Figure: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() on 1000x10 data as well as rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_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 colWeightedMeans_X_w_S 38.916 41.7615 44.32595 44.056 46.6310 58.755
2 rowWeightedMeans_X_w_S 84.563 88.3740 95.62305 91.375 106.1175 119.929
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.00000 1.00000 1.000000 1.000000 1.000000
2 rowWeightedMeans_X_w_S 2.172962 2.11616 2.15727 2.074065 2.275686 2.041171

Figure: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_S() on 1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

10x1000 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]
> w <- runif(nrow(X))
> w_S <- w[rows]
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5328139 284.6    7916910 422.9  7916910 422.9
Vcells 10454903  79.8   33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colWeightedMeans_X_w_S = colWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `colWeightedMeans(X, w, rows, cols)` = colWeightedMeans(X, w = w, rows = rows, cols = cols, na.rm = FALSE), 
+     `colWeightedMeans(X[rows, cols], w[rows])` = colWeightedMeans(X[rows, cols], w = w[rows], na.rm = FALSE), 
+     unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5328133 284.6    7916910 422.9  7916910 422.9
Vcells 10464986  79.9   33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowWeightedMeans_X_w_S = rowWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `rowWeightedMeans(X, w, cols, rows)` = rowWeightedMeans(X, w = w, rows = cols, cols = rows, na.rm = FALSE), 
+     `rowWeightedMeans(X[cols, rows], w[rows])` = rowWeightedMeans(X[cols, rows], w = w[rows], na.rm = FALSE), 
+     unit = "ms")

Table: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() 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 colWeightedMeans_X_w_S 0.027334 0.0291200 0.0317376 0.0305235 0.031303 0.134176
3 colWeightedMeans(X[rows, cols], w[rows]) 0.045773 0.0486295 0.0515463 0.0517670 0.052761 0.074724
2 colWeightedMeans(X, w, rows, cols) 0.063654 0.0672375 0.0704083 0.0716180 0.072744 0.080886
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
3 colWeightedMeans(X[rows, cols], w[rows]) 1.674581 1.669969 1.624137 1.695972 1.685493 0.5569103
2 colWeightedMeans(X, w, rows, cols) 2.328748 2.308980 2.218446 2.346323 2.323867 0.6028351

Table: Benchmarking of rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[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 rowWeightedMeans_X_w_S 0.074186 0.0777535 0.0873818 0.0880925 0.0958035 0.109595
3 rowWeightedMeans(X[cols, rows], w[rows]) 0.087743 0.0916445 0.1014660 0.0984410 0.1137795 0.123370
2 rowWeightedMeans(X, w, cols, rows) 0.101177 0.1059545 0.1182516 0.1131520 0.1313915 0.207479
  expr min lq mean median uq max
1 rowWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 rowWeightedMeans(X[cols, rows], w[rows]) 1.182743 1.178654 1.161180 1.117473 1.187634 1.125690
2 rowWeightedMeans(X, w, cols, rows) 1.363829 1.362697 1.353274 1.284468 1.371469 1.893143

Figure: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() on 10x1000 data as well as rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_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
1 colWeightedMeans_X_w_S 27.334 29.1200 31.73765 30.5235 31.3030 134.176
2 rowWeightedMeans_X_w_S 74.186 77.7535 87.38180 88.0925 95.8035 109.595
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
2 rowWeightedMeans_X_w_S 2.714056 2.670107 2.753254 2.886055 3.060521 0.8168003

Figure: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_S() on 10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x1000 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]
> w <- runif(nrow(X))
> w_S <- w[rows]
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5328347 284.6    7916910 422.9  7916910 422.9
Vcells 10499858  80.2   33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colWeightedMeans_X_w_S = colWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `colWeightedMeans(X, w, rows, cols)` = colWeightedMeans(X, w = w, rows = rows, cols = cols, na.rm = FALSE), 
+     `colWeightedMeans(X[rows, cols], w[rows])` = colWeightedMeans(X[rows, cols], w = w[rows], na.rm = FALSE), 
+     unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5328341 284.6    7916910 422.9  7916910 422.9
Vcells 10599941  80.9   33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowWeightedMeans_X_w_S = rowWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `rowWeightedMeans(X, w, cols, rows)` = rowWeightedMeans(X, w = w, rows = cols, cols = rows, na.rm = FALSE), 
+     `rowWeightedMeans(X[cols, rows], w[rows])` = rowWeightedMeans(X[cols, rows], w = w[rows], na.rm = FALSE), 
+     unit = "ms")

Table: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() 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 colWeightedMeans_X_w_S 0.108428 0.1168360 0.1528727 0.1272540 0.2098625 0.259869
3 colWeightedMeans(X[rows, cols], w[rows]) 0.227391 0.2393220 0.3090473 0.2617915 0.4170575 0.500458
2 colWeightedMeans(X, w, rows, cols) 0.343611 0.3620755 0.5765176 0.4073580 0.6181440 10.841309
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 colWeightedMeans(X[rows, cols], w[rows]) 2.097161 2.048358 2.021600 2.057236 1.987289 1.925809
2 colWeightedMeans(X, w, rows, cols) 3.169025 3.099006 3.771227 3.201141 2.945471 41.718362

Table: Benchmarking of rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[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 rowWeightedMeans_X_w_S 0.467192 0.5749695 0.7012377 0.5907415 0.6168725 10.128518
3 rowWeightedMeans(X[cols, rows], w[rows]) 0.560519 0.7025095 0.7616442 0.7902015 0.8076905 1.122994
2 rowWeightedMeans(X, w, cols, rows) 0.655268 0.8022210 0.9124271 0.9097415 1.0074615 1.574210
  expr min lq mean median uq max
1 rowWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
3 rowWeightedMeans(X[cols, rows], w[rows]) 1.199762 1.221820 1.086143 1.337643 1.309331 0.1108745
2 rowWeightedMeans(X, w, cols, rows) 1.402567 1.395241 1.301167 1.539999 1.633176 0.1554235

Figure: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() on 100x1000 data as well as rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_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 colWeightedMeans_X_w_S 108.428 116.8360 152.8727 127.2540 209.8625 259.869
2 rowWeightedMeans_X_w_S 467.192 574.9695 701.2377 590.7415 616.8725 10128.518
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.00000 1.000000 1.000000 1.00000
2 rowWeightedMeans_X_w_S 4.308776 4.921167 4.58707 4.642223 2.939413 38.97548

Figure: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_S() on 100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x100 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]
> w <- runif(nrow(X))
> w_S <- w[rows]
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5328553 284.6    7916910 422.9  7916910 422.9
Vcells 10502170  80.2   33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colWeightedMeans_X_w_S = colWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `colWeightedMeans(X, w, rows, cols)` = colWeightedMeans(X, w = w, rows = rows, cols = cols, na.rm = FALSE), 
+     `colWeightedMeans(X[rows, cols], w[rows])` = colWeightedMeans(X[rows, cols], w = w[rows], na.rm = FALSE), 
+     unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  5328547 284.6    7916910 422.9  7916910 422.9
Vcells 10602253  80.9   33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowWeightedMeans_X_w_S = rowWeightedMeans(X_S, w = w_S, na.rm = FALSE), 
+     `rowWeightedMeans(X, w, cols, rows)` = rowWeightedMeans(X, w = w, rows = cols, cols = rows, na.rm = FALSE), 
+     `rowWeightedMeans(X[cols, rows], w[rows])` = rowWeightedMeans(X[cols, rows], w = w[rows], na.rm = FALSE), 
+     unit = "ms")

Table: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() 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 colWeightedMeans_X_w_S 0.135671 0.1487570 0.1959958 0.171817 0.2450590 0.324342
3 colWeightedMeans(X[rows, cols], w[rows]) 0.257533 0.2677835 0.4755548 0.315645 0.4969675 10.618271
2 colWeightedMeans(X, w, rows, cols) 0.380244 0.4110905 0.5569525 0.481159 0.7341595 0.925653
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 colWeightedMeans(X[rows, cols], w[rows]) 1.898217 1.800140 2.426353 1.837100 2.027950 32.737885
2 colWeightedMeans(X, w, rows, cols) 2.802692 2.763504 2.841656 2.800416 2.995848 2.853941

Table: Benchmarking of rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[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 rowWeightedMeans_X_w_S 0.472588 0.5570490 0.5858299 0.591656 0.6018410 0.793143
3 rowWeightedMeans(X[cols, rows], w[rows]) 0.570157 0.6293985 0.7271596 0.721855 0.8063925 1.541236
2 rowWeightedMeans(X, w, cols, rows) 0.668604 0.7962930 0.9796982 0.917700 1.0258700 7.592066
  expr min lq mean median uq max
1 rowWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 rowWeightedMeans(X[cols, rows], w[rows]) 1.206457 1.129880 1.241247 1.220059 1.339876 1.943201
2 rowWeightedMeans(X, w, cols, rows) 1.414771 1.429485 1.672325 1.551070 1.704553 9.572128

Figure: Benchmarking of colWeightedMeans_X_w_S(), colWeightedMeans(X, w, rows, cols)() and colWeightedMeans(X[rows, cols], w[rows])() on 1000x100 data as well as rowWeightedMeans_X_w_S(), rowWeightedMeans(X, w, cols, rows)() and rowWeightedMeans(X[cols, rows], w[rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_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 colWeightedMeans_X_w_S 135.671 148.757 195.9958 171.817 245.059 324.342
2 rowWeightedMeans_X_w_S 472.588 557.049 585.8299 591.656 601.841 793.143
  expr min lq mean median uq max
1 colWeightedMeans_X_w_S 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowWeightedMeans_X_w_S 3.483338 3.744691 2.988993 3.443524 2.455903 2.445391

Figure: Benchmarking of colWeightedMeans_X_w_S() and rowWeightedMeans_X_w_S() on 1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

Appendix

Session information

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.02 secs.

Reproducibility

To reproduce this report, do:

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

Copyright Dongcan Jiang. Last updated on 2021-08-25 22:31:53 (+0200 UTC). Powered by RSP.