我正在尝试使用RcppEigen创建一个函数,该函数调用(输出)具有长双精度的本征矩阵。
当我编译时:
// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(const Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>>& onesfgh_LPPLS) {
}
它起作用(当然,有一个警告,指出该函数什么也不做)。但是当我对以下内容执行相同操作时:
// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(const Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, 4>>& onesfgh_LPPLS) {
}
失败。
如果我在参数中使用长双精度字(使用以前使用双精度字的组合),也会失败:
// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(const Eigen::Map<Eigen::Matrix<long double, Eigen::Dynamic, Eigen::Dynamic>>& onesfgh_LPPLS) {
}
我该怎么办?
答案 0 :(得分:2)
第二个变体不起作用,因为RcppEigen仅支持用于从R对象自动转换为Eigen对象的动态矩阵和向量。由于R对象本质上是动态的,因此这是完全合理的。因此,当需要从R进行转换时,本征 中的维度参数必须为1或Dynamic
。
第三种形式失败,因为您尝试基于使用long double
的R对象使用double
初始化本征对象。请记住,对于Eigen::Map
,R和本征对象共享相同的内存。如果数据类型不同,那么这将无法正常工作,而您必须在某处进行转换。如果我删除了Eigen::Map
,即使用
// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(Eigen::Matrix<long double, Eigen::Dynamic, Eigen::Dynamic>& onesfgh_LPPLS) {
}
它确实可以编译。我没有尝试过它是否可以正常工作。