R中的列式最大值

时间:2013-11-28 22:30:26

标签: r max apply

获取由矩阵式对象的每列中的最大值组成的向量的最快方法是什么?基础R中有apply(A, 2, max)的更快替代方案吗?

?colSums表示它“等同于使用FUN =具有适当边距的总和,但速度要快得多”。不幸的是,似乎没有colMax。或者我错过了什么?

1 个答案:

答案 0 :(得分:3)

您可以使用Rcpp编写自己的c ++函数:

#include <Rcpp.h> 
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector colMaxRcpp(NumericMatrix X) {
    int ncol = X.ncol();
    Rcpp::NumericVector out(ncol);
    for (int col = 0; col < ncol; col++){
        out[col]=Rcpp::max(X(_, col)); 
    } 
    return wrap(out);
} 

这里有一些基准测试:

A <- matrix(rnorm(1e6),ncol=10000)
apply.max <- function(A) apply(A, 2, max)
identical(colMaxRcpp(A),apply.max(A))
[1] TRUE

library(microbenchmark)
microbenchmark(colMaxRcpp(A),apply.max(A),times=1)
Unit: milliseconds
          expr      min       lq   median       uq      max neval
 colMaxRcpp(A) 11.57765 11.57765 11.57765 11.57765 11.57765     1
  apply.max(A) 79.66040 79.66040 79.66040 79.66040 79.66040     1

编辑为矩阵30 * 30添加基准。 Rcpp的速度至少要快12倍。

A <- matrix(rnorm(30*30),ncol=30)
Unit: microseconds
          expr     min      lq   median      uq      max neval
 colMaxRcpp(A)  13.274  14.033  15.1715  18.584   32.238    10
  apply.max(A) 162.702 166.495 174.0805 189.251 1310.716    10
相关问题