Простое умножение матриц в RcppEigen
дает матрицу правильных размеров, но первый элемент повторяется для всех элементов.
Rcpp
исходный код с использованием RcppEigen
для умножения матрицы:
#include <Rcpp.h>
#include <RcppEigen.h>
using namespace Rcpp;
// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::export]]
NumericMatrix myfun(const NumericVector a , const NumericVector b) {
const Eigen::Map<Eigen::MatrixXd> a_eig(Rcpp::as<Eigen::Map<Eigen::MatrixXd> >(a));
const Eigen::Map<Eigen::MatrixXd> b_eig(Rcpp::as<Eigen::Map<Eigen::MatrixXd> >(b));
return wrap(a_eig * b_eig);
}
Звонок с R
:
a=matrix(data=1,nrow=10,ncol=1)
b=sample(100,10)
a * b
[,1]
[1,] 67
[2,] 59
[3,] 19
[4,] 68
[5,] 83
[6,] 4
[7,] 28
[8,] 88
[9,] 97
[10,] 43
myfun(a,b)
[,1]
[1,] 67
[2,] 67
[3,] 67
[4,] 67
[5,] 67
[6,] 67
[7,] 67
[8,] 67
[9,] 67
[10,] 67