2016-07-22 24 views
0

Ich versuche, einige Code in Sparse-Matrizen zu konvertieren. Ich sehe, dass ich in der Lage sollte spsolve von http://arma.sourceforge.net/docs.html#spsolveKann spsolve nicht aufrufen

jedoch zu verwenden, wenn ich es versuche, erhalte ich Compiler-Fehler auf -

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

Die Fehlerzeile ist - arma::sp_mat xu = arma::spsolve(WuT, YTCupu);

von here

Ich bin mir sicher, dass da etwas offensichtlich ist, dass ich vermisse, aber ich kann es nicht herausfinden. Irgendwelche Vorschläge?

Hier ist, was

> 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 

Antwort

2

prüfen geladen wird die spsolve documentation wieder:

wobei A eine Sparse Matrix ist, B eine dichte Matrix oder Vektor und X ist unbekannt

Es gibt keinen gegenwärtigen Weg im Gürteltier, um zwei spärliche Matrizen zu lösen, das Beste, das getan werden kann, ist:

#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 
} 

Blick über Eigen's sparse documentation Ich bin nicht ganz sicher, dass Sie das auch verwenden können.

+0

Lösung für 'spärlich auf spärlich' wäre eine nette Ergänzung, oder möglicherweise sogar neue Mikropackage (auch den Aufruf exportieren). –

+0

Sollte ein Upstream-Push zu Gürteltier sein, wenn es entwickelt wird. Ich werde in spärliche Algorithmen schauen müssen. – coatless

+0

Könnte eine Frage für Ryan sein, da das spärliche Zeug dazu neigt, von der MLPACK Verwendung zu kommen. Wir können sie mailen. –