无法调用spsolve

时间:2016-07-22 06:13:52

标签: r rcpp armadillo

我正在尝试将一些代码转换为稀疏矩阵。我发现我应该可以使用来自http://arma.sourceforge.net/docs.html#spsolve

的spsolve

然而,当我尝试它时,我得到编译器错误 -

no matching function call to 'spsolve(arma::spmat&, arma::sp_mat&)

错误行是 -     arma::sp_mat xu = arma::spsolve(WuT, YTCupu);

来自here

我确定有一些明显的东西我不知道但是我无法弄明白。有什么建议吗?

以下是加载的内容

> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.4 LTS

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8       
 [4] LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] recommenderlabrats_1.0    RcppArmadillo_0.7.100.3.1 recommenderlab_0.2-0     
[4] registry_0.3              proxy_0.4-16              arules_1.4-1             
[7] Matrix_1.2-6             

loaded via a namespace (and not attached):
[1] tools_3.3.1     Rcpp_0.12.6     grid_3.3.1      irlba_2.0.0     lattice_0.20-24

1 个答案:

答案 0 :(得分:3)

再次检查spsolve documentation

  

其中A是稀疏矩阵,B是密集矩阵或向量,X是未知的

犰狳目前没有办法解决两个稀疏矩阵,可以做的最好:

#include <RcppArmadillo.h>
using namespace Rcpp;

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

// [[Rcpp::export]]
void arma_solve_tester() {
    // SPARSE
    arma::sp_mat A = arma::sprandu<arma::sp_mat>(1000, 1000, 0.1);

    arma::vec b = arma::randu<arma::vec>(1000);    // DENSE
    arma::mat B = arma::randu<arma::mat>(1000, 5); // DENSE

    arma::vec x = spsolve(A, b);  // solve one system
    arma::mat X = spsolve(A, B);  // solve several systems
}

浏览Eigen's sparse documentation我并不完全确定您是否可以使用它。