(Rcpp,犰狳)将arma :: vec转换为arma :: mat

时间:2019-06-15 00:46:15

标签: r type-conversion rcpp

我有一个矩阵X,该矩阵由arma::vectorise函数向量化。在对转换后的向量x进行一些计算之后,我想将其重塑为arma::mat。我尝试在Armadillo中使用.reshape函数,但这给了我这个错误。

Rcpp代码

// [[Rcpp::export]]
arma::mat vec2mat(arma::vec x, int nrow, int ncol){
  return x.reshape(nrow, ncol);
}

错误消息

no viable conversion from returned value of type 'void' to function return type 'arma::mat' (aka 'Mat<doubld>')

有人会帮助我找到解决这个问题的好方法吗?我不确定在这种情况下应该为函数返回类型使用哪种类型。如果您知道将向量转换为矩阵的另一种方法,那也很好:)

谢谢!

1 个答案:

答案 0 :(得分:3)

您忽略了Armadillo文档中的详细信息:reshape()已经存在的矩阵的成员函数,而您尝试通过赋值来强制使用它。编译器告诉您没有质量。因此,请听编译器。

工作代码

#include <RcppArmadillo.h>

// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
arma::mat vec2mat(arma::vec x, int nrow, int ncol) {
  arma::mat y(x);
  y.reshape(nrow, ncol);
  return y;
}

演示

> Rcpp::sourceCpp("56606499/answer.cpp")  ## filename I used
> vec2mat(sqrt(1:10), 2, 5)
         [,1]     [,2]     [,3]     [,4]     [,5]
[1,] 1.000000 1.732051 2.236068 2.645751 3.000000
[2,] 1.414214 2.000000 2.449490 2.828427 3.162278
>