RcppArmadillo:将sp_mat转换为sp_imat

时间:2016-08-17 19:41:25

标签: r rcpp armadillo

我正在阅读Dirk's notes,因为我试图找到将稀疏矩阵传递给Rcpp函数的解决方案。我的稀疏矩阵只包含1和0,所以为了将sp_mat对象转换为sp_imat对象,我尝试了以下操作:

arma::sp_imat toSpMat(Rcpp::S4 mat){

  Rcpp::IntegerVector dims = mat.slot("Dim");
  arma::urowvec i = Rcpp::as<arma::urowvec>(mat.slot("i"));
  arma::urowvec p = Rcpp::as<arma::urowvec>(mat.slot("p"));
  arma::vec x = Rcpp::as<arma::vec>(mat.slot("x"));
  int nrow = dims[0], ncol = dims[1];
  arma::sp_mat res(i, p, x, nrow, ncol);
  arma::sp_imat res2(res);
  return res2;

}

但是,我无法按照我的方式初始化sp_imat。我收到以下错误:

  

错误:没有用于初始化&#39; arma :: sp_imat&#39;的匹配构造函数(又名&#39; SpMat&#39;)

我还尝试使用批量插入构造函数初始化sp_imat,但这也没有用。做正确的方法是什么?我试图让它适用于这个例子:

library(Matrix)

> mat = Matrix(c(1,0,0,1), nrow = 2, ncol = 2, sparse = T)
> mat2 = toSpMat(mat)

1 个答案:

答案 0 :(得分:1)

line 93 of RcppArmadilloWrap.h,注释掉转换为整数。我不记得为什么。

也许你可以尝试一下;否则你可能不得不使用稀疏的真实的值数据点。

编辑:由@coatless突出显示,但您有一个仅限Armadillo的编程错误。你需要它conv_to() function

从更广泛的意义上说,当你似乎在编写手工转换器时,你可能只想工作在内部&#34;表示。毕竟,索引应该是相同的......