我想用RcppArmadillo做一些矩陣乘法運算。但是,我的代碼顯示它不會因RcppArmadillo變得更快。與RcppArmadillo的矩陣乘法:爲什麼它不是更快?
我使用Windows_10_Pro其中R 3.2.4,和RcppArmadillo 0.6.600.4.0
例如:
library(RcppArmadillo)
library(inline)
MCplus <- cxxfunction(signature(X_="numeric", Y_="numeric"),body ='
arma::mat X = Rcpp::as<arma::mat>(X_);
arma::mat Y = Rcpp::as<arma::mat>(Y_);
arma::mat ans = X * Y * X;
return(wrap(ans));
', plugin="RcppArmadillo")
A <- matrix(1:16000000,4000,4000)
C <- matrix(2:16000001,4000,4000)
R_M <- proc.time()
ans_R <- A%*%C%*%A # test with R
proc.time() - R_M
C_M <- proc.time()
ans_C <- MCplus(A,C) # test with RcppArmadillo
proc.time() - C_M
的R輸出端:
user system elapsed
106.75 0.24 106.98
而RcppArmadillo輸出:
user system elapsed
108.28 0.23 108.56
有什麼可以改進的嗎?
在此先感謝!
我使用'microbenchmark'的速度更快我的平均R爲7.36秒,RcppArmadillo爲5.67秒。 – Raad
這裏的另一個問題是,這涉及到數據的兩個副本:一個是構建Armadillo矩陣時,另一個是從相乘結果創建R對象時。您可以通過使用Armadillo的高級構造函數來避免此成本:有關更多信息,請參閱http://arma.sourceforge.net/docs.html#Mat。 –
好點,我們現在可以通過Rcpp Attributes免費獲得這些。 –