使用 RcppEigen 将 MatrixXd 转换为 Matrix3d
Casting a MatrixXd to a Matrix3d with RcppEigen
对于RcppEigen
,我需要一个Matrix3d
作为函数的参数。但这是不可能的,它只接受MatrixXd
。我试过按如下方式进行转换,但这不起作用:
Rcpp::List MtoAxisAngle(Eigen::MatrixXd & m)
{
Eigen::Matrix3d m3 = m.cast();
......
有什么解决办法吗?
您可以在新矩阵的初始化中使用现有矩阵:
// [[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,因此您应该事先检查大小是否正确。
对于RcppEigen
,我需要一个Matrix3d
作为函数的参数。但这是不可能的,它只接受MatrixXd
。我试过按如下方式进行转换,但这不起作用:
Rcpp::List MtoAxisAngle(Eigen::MatrixXd & m)
{
Eigen::Matrix3d m3 = m.cast();
......
有什么解决办法吗?
您可以在新矩阵的初始化中使用现有矩阵:
// [[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,因此您应该事先检查大小是否正确。