我正在阅读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)
答案 0 :(得分:1)
每line 93 of RcppArmadilloWrap.h,注释掉转换为整数。我不记得为什么。
也许你可以尝试一下;否则你可能不得不使用稀疏的真实的值数据点。
编辑:由@coatless突出显示,但您有一个仅限Armadillo的编程错误。你需要它conv_to()
function。
从更广泛的意义上说,当你似乎在编写手工转换器时,你可能只想工作在内部&#34;表示。毕竟,索引应该是相同的......