<%@include file="includes/setup.md.rsp"%> <%@string fcnname="indexByRow"%> <% fcnname <- "<%@string name="fcnname"%>" %> <%@meta title="${fcnname}() benchmarks"%> <%@meta author="Henrik Bengtsson"%> <%@meta date="2014-11-09"%> <%@include file="${header}"%> <% lfun <- local({ locals <- list() function(txt = NULL) { if (is.null(txt)) return(locals) local <- list(txt) locals <<- c(locals, local) } }) %> # <%@meta name="title"%> This report benchmark the performance of `<%=fcnname%>()` against alternative methods: * `indexByRow_R1()` based in `matrix(..., byrow = TRUE)` * `indexByRow_R2()` is a modified version of `indexByRow_R1()` where `indexByRow_R1()` and `indexByRow_R2()` are defined as in the Appendix. <% lfun(withCapture({ indexByRow_R1 <- function(dim, idxs = NULL, ...) { n <- prod(dim) x <- matrix(seq_len(n), nrow = dim[2L], ncol = dim[1L], byrow = TRUE) if (!is.null(idxs)) x <- x[idxs] as.vector(x) } # indexByRow_R1() })) lfun(withCapture({ indexByRow_R2 <- function(dim, idxs = NULL, ...) { n <- prod(dim) if (is.null(idxs)) { x <- matrix(seq_len(n), nrow = dim[2L], ncol = dim[1L], byrow = TRUE) as.vector(x) } else { idxs <- idxs - 1 cols <- idxs %/% dim[2L] rows <- idxs %% dim[2L] cols + dim[1L]*rows + 1L } } # indexByRow_R2() })) %> ## Data <% lfun(withCapture({ <%@include file="R/random-matrices.R"%> })) %> ```r <%=withCapture({ data <- rmatrices(mode = "index") })%> ``` where `rmatrices()` is defined in the Appendix. <% # data <- data[1:2] %> ## Results <% for (dataLabel in names(data)) { %> <% message(dataLabel) %> ### <%=dataLabel%> matrix ```r <%=withCapture({ X <- data[[.dataLabel.]] dim <- dim(X) idxsList <- list( 'all-by-NULL' = NULL, all = seq_len(prod(dim)), odd = seq(from = 1, to = prod(dim), by = 2L) ) str(idxsList) })%> ``` <% for (ii in seq_along(idxsList)) { %> #### Index set '<%=names(idxsList)[ii]%>' <% idxs <- idxsList[[ii]] idxsTag <- names(idxsList)[ii] # Validate correctness res <- list( indexByRow = indexByRow(dim, idxs = idxs), indexByRow_R1 = indexByRow_R1(dim, idxs = idxs), indexByRow_R2 = indexByRow_R2(dim, idxs = idxs) ) lapply(res, FUN = function(x) stopifnot(all.equal(x, res[[1]]))) gc() %> ```r <%=withCapture({ stats <- microbenchmark( indexByRow = indexByRow(dim, idxs = idxs), indexByRow_R1 = indexByRow_R1(dim, idxs = idxs), indexByRow_R2 = indexByRow_R2(dim, idxs = idxs), unit = "ms" ) })%> ``` <% benchmarkResults(stats, tags=c(dataLabel, idxsTag)) %> <% } # for (ii ...) %> <% } # for (dataLabel ...) %> <%@include file="${footer}"%> ### Local functions ```r <%=lfun()[[1]]%> ``` ```r <%=lfun()[[2]]%> ``` ```r <%=lfun()[[3]]%> ``` <%--------------------------------------------------------------------------- HISTORY: 2014-06-09 o Created. ---------------------------------------------------------------------------%>