Rcpp中的元素矩阵乘法

Rcpp中的元素矩阵乘法,rcpp,Rcpp,我正在编写一个需要元素矩阵乘法的代码。我试图在Rcpp中实现这一点,因为代码需要一些昂贵的循环。我是Rcpp的新手,可能缺少一些东西,但我无法让元素矩阵乘法工作 // [[Rcpp::export]] NumericMatrix multMat(NumericMatrix m1, NumericMatrix m2) { NumericMatrix multMatrix = m1 * m2 // How can this be implemented ? } 我可能遗漏了一些非常琐碎的

我正在编写一个需要元素矩阵乘法的代码。我试图在Rcpp中实现这一点,因为代码需要一些昂贵的循环。我是Rcpp的新手,可能缺少一些东西,但我无法让元素矩阵乘法工作

// [[Rcpp::export]]

NumericMatrix multMat(NumericMatrix m1, NumericMatrix m2) {
    NumericMatrix multMatrix = m1 * m2 // How can this be implemented ?
}
我可能遗漏了一些非常琐碎的东西,我想问问是否有任何方法可以做到这一点(除了使用循环迭代每个元素并进行乘法)


提前感谢。

您可能希望使用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的sugar,并根据需要将其转换为矩阵:

#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) )
*/
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
数值向量multMat(数值矩阵m1,数值矩阵m2){
数值向量mult矩阵=m1*m2;
multMatrix.attr(“dim”)=维度(m1.nrow(),m1.ncol());
返回多矩阵;
}
/***R
multMat(矩阵(1:9,nrow=3),矩阵(1:9,nrow=3))
*/

但是,正如德克所说,最好使用
RcppArmadillo
进行矩阵运算。

感谢您的反馈。自从从山狮升级后,我在小牛身上犯了很多错误,这也是我暂时停止使用犰狳的原因之一。我已经发布了使用您发布的解决方案时出现的错误。我更新了Makevars,并且几乎跟踪了网络上的每一条线索,但都没有结果。一旦这个问题解决,应该能够使用它。补充已经回答的问题。