MatrixXf的Rcpp特征映射错误

时间:2016-10-18 17:02:57

标签: c++ r eigen rcpp

为什么以下代码无法编译?

library(Rcpp)
cppFunction('
    int rows(const NumericMatrix& X) {
        using Eigen::MatrixXf;  
        typedef Eigen::Map<MatrixXf> MapMat;
        MapMat X1(as<MapMat>(X));
        return X1.rows();
}', depends = "RcppEigen")

它会抛出以下错误:

error: no matching function for call to 'Eigen::Map<Eigen::Matrix<float, -1, -1> >::Map(Rcpp::Vector<14, Rcpp::PreserveStorage>::iterator, int&, int&)'
         OUT get() {return OUT(vec.begin(), d_nrow, d_ncol );}

当我使用MatrixXd时,相同的代码工作正常。

感谢。

1 个答案:

答案 0 :(得分:2)

NumericMatrix使用类型double(而不是float)。 Eigen不支持使用不同类型的矩阵之间的隐式类型转换。您的代码似乎尝试将double NumericMatrix的内存读作float特征矩阵。只需使用MatrixXd类型。