RcppEigen 作为参数失败
RcppEigen as an argument fails
我正在尝试使用 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) {
}
它失败了。
如果我尝试在参数中使用 long double 也会失败(使用以前有效的组合,当使用 double 时):
// [[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) {
}
我该怎么办?
第二个变体不起作用,因为 RcppEigen 仅支持动态矩阵和向量以从 R 对象自动转换为 Eigen 对象。这是完全有道理的,因为 R 对象的大小本质上是动态的。因此,当需要从 R 转换时,Eigen 中的维度参数必须 为 1 或 Dynamic
。
第三种形式失败,因为您试图根据使用 double
的 R 对象使用 long double
初始化特征对象。请记住,对于 Eigen::Map
,R 和 Eigen 对象共享相同的内存。如果数据类型不同并且您必须在某处进行转换,那将无法工作。如果我删除 Eigen::Map
,即使用
// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(Eigen::Matrix<long double, Eigen::Dynamic, Eigen::Dynamic>& onesfgh_LPPLS) {
}
它确实可以编译。没试过能不能正常使用
我正在尝试使用 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) {
}
它失败了。
如果我尝试在参数中使用 long double 也会失败(使用以前有效的组合,当使用 double 时):
// [[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) {
}
我该怎么办?
第二个变体不起作用,因为 RcppEigen 仅支持动态矩阵和向量以从 R 对象自动转换为 Eigen 对象。这是完全有道理的,因为 R 对象的大小本质上是动态的。因此,当需要从 R 转换时,Eigen 中的维度参数必须 为 1 或 Dynamic
。
第三种形式失败,因为您试图根据使用 double
的 R 对象使用 long double
初始化特征对象。请记住,对于 Eigen::Map
,R 和 Eigen 对象共享相同的内存。如果数据类型不同并且您必须在某处进行转换,那将无法工作。如果我删除 Eigen::Map
,即使用
// [[Rcpp::export]]
Eigen::Matrix<long double, 4, 4> A_matrix_LPPLS_RcppEigen(Eigen::Matrix<long double, Eigen::Dynamic, Eigen::Dynamic>& onesfgh_LPPLS) {
}
它确实可以编译。没试过能不能正常使用