Умножение матриц по элементам в Rcpp



Я работаю над кодом, который требует умножения матрицы по элементам. Я пытаюсь реализовать это в Rcpp, так как код требует некоторых дорогостоящих циклов. Я довольно новичок в Rcpp и, возможно, что-то упускаю, но я не могу заставить работать умножение матрицы по элементам.



// [[Rcpp::export]]

NumericMatrix multMat(NumericMatrix m1, NumericMatrix m2) {
NumericMatrix multMatrix = m1 * m2 // How can this be implemented ?
}


Возможно, я упустил что-то очень тривиальное и хотел спросить, существует ли какой-либо метод для этого (кроме использования циклов для перебора каждого элемента и умножения).

Спасибо в продвижение.

609   2  

2 ответов:

Вы, вероятно, хотите использовать RcppArmadillo (или RcppEigen) для Реальной математики на матрицах.

R> library(RcppArmadillo)
R> cppFunction("arma::mat schur(arma::mat& a, arma::mat& b) { 
+                   return(a % b); }", depends="RcppArmadillo")
R> schur(matrix(1:4,2,2), matrix(4:1,2,2))
     [,1] [,2]
[1,]    4    6
[2,]    6    4
R> 
Элементарное умножение также называется умножением Шура (или Адамара) . В броненосцы, % поддерживает его; см. Броненосец "документы" дополнительные.

Если вы хотите подделать его, вы можете следовать тому, что сделано здесь и использовать сахар Rcpp на регулярных векторах и преобразовывать их в матрицы по мере необходимости:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector multMat(NumericMatrix m1, NumericMatrix m2) {
  NumericVector multMatrix = m1 * m2;
  multMatrix.attr("dim") = Dimension(m1.nrow(), m1.ncol());
  return multMatrix;
}

/*** R
multMat( matrix(1:9, nrow=3), matrix(1:9, nrow=3) )
*/
Но, как сказал Дирк, для матричных операций лучше использовать RcppArmadillo.

Comments

    Ничего не найдено.