Умножение матриц по элементам в Rcpp
Я работаю над кодом, который требует умножения матрицы по элементам. Я пытаюсь реализовать это в Rcpp, так как код требует некоторых дорогостоящих циклов. Я довольно новичок в Rcpp и, возможно, что-то упускаю, но я не могу заставить работать умножение матрицы по элементам.
// [[Rcpp::export]]
NumericMatrix multMat(NumericMatrix m1, NumericMatrix m2) {
NumericMatrix multMatrix = m1 * m2 // How can this be implemented ?
}
Возможно, я упустил что-то очень тривиальное и хотел спросить, существует ли какой-либо метод для этого (кроме использования циклов для перебора каждого элемента и умножения).
Спасибо в продвижение.
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