r - 使用 RcppEigen 将 MatrixXd 转换为 Matrix3d
问题描述
有了RcppEigen
,我需要 aMatrix3d
作为函数的参数。但这是不可能的,它只接受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,因此您应该事先检查大小是否正确。
推荐阅读
- android - 为什么安卓版本会包含机器人神器?
- python - 是否使用 del 切片先创建一个新对象然后删除?会到位吗?
- c# - C# Docusign API Launcher 错误 ArgumentException:必须提供“ClientId”选项。(参数'ClientId')
- python-3.x - 用于运行 Python 脚本的 Windows 任务计划程序
- spring-boot - Thymeleaf - 显示列表/集合字段时出错
- javascript - 如何使用 JQuery 切换 CSS?
- c++ - 是否可以在没有未定义行为的情况下在 C++ 中创建标记指针?
- php - 如何使用 eloquent 计算 laravel 中某个日期的工作时间?
- amazon-web-services - AWS ECS docker 容器 RDS 集成
- tensorflow - BERT + 自定义层训练性能随时期下降