0
獲得由矩陣狀對象的每列最大值組成的向量的最快方法是什麼?基地R中有apply(A, 2, max)
更快的替代方案嗎?R中的列最大值
?colSums
表示它「相當於使用適用於具有適當邊距的FUN = sum,但速度更快」。不幸的是,似乎沒有colMax
。或者我錯過了什麼?
獲得由矩陣狀對象的每列最大值組成的向量的最快方法是什麼?基地R中有apply(A, 2, max)
更快的替代方案嗎?R中的列最大值
?colSums
表示它「相當於使用適用於具有適當邊距的FUN = sum,但速度更快」。不幸的是,似乎沒有colMax
。或者我錯過了什麼?
可以使用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
matrix or data.frame? – flodel
矩陣在我的具體情況 – Museful
看看:http://stackoverflow.com/questions/7824912/max-and-min-functions-that-are-similar-to-colmeans – Chargaff