Приведение MatrixXd к Matrix3d ​​с помощью RcppEigen - PullRequest
0 голосов
/ 27 августа 2018

С RcppEigen мне нужен Matrix3d в качестве аргумента функции. Но это невозможно, он принимает только MatrixXd. Я пытался разыграть следующее, но это не работает:

Rcpp::List MtoAxisAngle(Eigen::MatrixXd & m)
{
  Eigen::Matrix3d m3 = m.cast();
  ......

Есть решение?

1 Ответ

0 голосов
/ 27 августа 2018

Вы можете использовать существующую матрицу при инициализации новой матрицы:

// [[Rcpp::depends(RcppEigen)]]
#include <RcppEigen.h>

// [[Rcpp::export]]
Rcpp::List MtoAxisAngle(Eigen::MatrixXd & m)
{
  Eigen::Matrix3d m3(m);
  return Rcpp::List::create(Rcpp::Named("size") = m3.size());
}


/*** R
MtoAxisAngle(matrix(1:9,3,3))
# MtoAxisAngle(matrix(1:16,4,4))
*/

Поскольку вызов с несоответствующей матрицей убивает R, вам следует заранее проверить, верный ли размер.

...