我正在尝试将一些代码转换为稀疏矩阵。我发现我应该可以使用来自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
答案 0 :(得分:3)
其中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我并不完全确定您是否可以使用它。