Я пытаюсь выполнить некоторое умножение матрицы с помощью 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». Я получил среднее значение 7,36 секунды для R и 5,67 секунды для вашего решения RcppArmadillo. – Raad
Другая проблема заключается в том, что это включает в себя две копии ваших данных: одну при построении матриц Армадилло, а другую при создании объектов R из умноженных результатов. Вы можете избежать этой стоимости, используя расширенные конструкторы Armadillo: см. Http://arma.sourceforge.net/docs.html#Mat для получения дополнительной информации. –
Хорошая точка, и теперь мы получаем это бесплатно бесплатно с атрибутами Rcpp. –