That's useful to know about what svd_econ() exactly does. I will give that a shot and report back.
Has anyone looked at integrating something like SLEPc, Anasazi(via Trilinos) or ARPACK++ into rcpp? These would be some really cool tools to have available. http://www.grycap.upv.es/slepc/description/summary.htm http://trilinos.sandia.gov/packages/anasazi/ http://www.ime.unicamp.br/~chico/arpack++/<http://www.ime.unicamp.br/%7Echico/arpack++/> Someone actually wrote a wrapper for ARPACK++ for Eigen https://github.com/beam2d/arpaca/blob/master/README.md On Thu, Jun 14, 2012 at 9:04 AM, Conrad Sand <conrads...@gmail.com> wrote: > On Jun 15, 2012 12:11 AM, "Dirk Eddelbuettel" <e...@debian.org> wrote: > > Thanks for that earlier hint re 'thin' and 'full' SVDs. > > armadillo has the standard svd() and the thin version too: svd_econ(). > > > Conrad, any interest in switching to dgesdd? > > yes, but probably not simply changing svd() directly to dgedd(). lapack > gave the function a different name for a reason: the results may be > slightly different. if armadillo starts giving different results all of a > sudden, there would be a lot of displeased people. a big no no, given that > armadillo is used for critical stuff. > > I'll probably add an option to svd() to optionally use dgedd(). > > I've done something very similar for eig_sym() in armadillo 3.2, where an > alternative faster algorithm for eigen decomposition can be optionally used. > > > Dirk, at useR and across the room from Doug > > > > | > On Wed, Jun 13, 2012 at 4:07 PM, Douglas Bates <ba...@stat.wisc.edu> > wrote: > > | >> > > | >> On Wed, Jun 13, 2012 at 5:16 PM, Dirk Eddelbuettel <e...@debian.org> > wrote: > > | >> > > > | >> > On 13 June 2012 at 15:05, Julian Smith wrote: > > | >> > | I agree that RcppEigen is a little bit faster, but ease of use > is > > | >> > important to > > | >> > | me, so I feel like RcppArmadillo might win out in my > application. > > | >> > > > | >> > Yup, that my personal view too. > > | >> > > > | >> > | | RcppArmadillo will use the very same LAPACK and BLAS libs > your R > > | >> > session > > | >> > | | uses. So MKL, OpenBlas, ... are all options. Eigen actually > has its > > | >> > own > > | >> > | code > > | >> > | | outperforming LAPACK, so it doesn't as much there. > > | >> > | > > | >> > | Why do you think R outperforms RcppArmadillo in this example > below? > > | >> > Anyway to > > | >> > | speed this up? > > | >> > > > | >> > That is odd. "I guess it shouldn't." I shall take another look -- > as I > > | >> > understand it both should go to the same underlying Lapack > routine. I > > | >> > may > > | >> > have to consult with Conrad on this. > > | >> > > > | >> > Thanks for posting a full and reproducible example! > > | >> > > > | >> > Dirk > > | >> > > > | >> > | require(RcppArmadillo) > > | >> > | require(inline) > > | >> > | > > | >> > | arma.code <- ' > > | >> > | using namespace arma; > > | >> > | NumericMatrix Xr(Xs); > > | >> > | int n = Xr.nrow(), k = Xr.ncol(); > > | >> > | mat X(Xr.begin(), n, k, false); > > | >> > | mat U; > > | >> > | vec s; > > | >> > | mat V; > > | >> > | svd(U, s, V, X); > > | >> > | return wrap(s); > > | >> > | ' > > | >> > > | >> Because the arma code is evaluating the singular vectors (U and V) > as > > | >> well as the singular values (S) whereas the R code is only > evaluating > > | >> the singular values. There is considerably more effort required to > > | >> evaluate the singular vectors in addition to the singular values. > > | >> > > | >> > | rcppsvd <- cxxfunction(signature(Xs="numeric"), > > | >> > | arma.code, > > | >> > | plugin="RcppArmadillo") > > | >> > | > > | >> > | A<-matrix(rnorm(5000^2), 5000) > > | >> > | > > | >> > | > system.time(rcppsvd(A)) > > | >> > | user system elapsed > > | >> > | 1992.406 4.862 1988.737 > > | >> > | > > | >> > | > system.time(svd(A)) > > | >> > | user system elapsed > > | >> > | 652.496 2.641 652.614 > > | >> > | > > | >> > | On Wed, Jun 13, 2012 at 11:43 AM, Dirk Eddelbuettel < > e...@debian.org> > > | >> > wrote: > > | >> > | > > | >> > | > > | >> > | On 13 June 2012 at 10:57, Julian Smith wrote: > > | >> > | | I've been toying with both RcppArmadillo and RcppEigen > the past > > | >> > few days > > | >> > | and > > | >> > | | don't know which library to continue using. RcppEigen > seems > > | >> > really slick, > > | >> > | but > > | >> > | | appears to be lacking some of the decompositions I want > and > > | >> > isn't nearly > > | >> > | as > > | >> > | | fast to code. RcppArmadillo seems about as fast, easier > to code > > | >> > up etc. > > | >> > | What > > | >> > | | are some of the advantages/disadvantages of both? > > | >> > | > > | >> > | That's pretty close. I have been a fan of [Rcpp]Armadillo > which I > > | >> > find > > | >> > | easier to get my head around. Doug, however, moved from > > | >> > [Rcpp]Armadillo > > | >> > | to > > | >> > | [Rcpp]Eigen as it has some things he needs. Eigen should > have a > > | >> > "larger" > > | >> > | API > > | >> > | than Armadillo, but I find the code and docs harder to > navigate. > > | >> > | > > | >> > | And you should find Eigen to be a little faster. Andreas > Alfons > > | >> > went as far > > | >> > | as building 'robustHD' using RcppArmadillo with a drop-in > for > > | >> > RcppEigen (in > > | >> > | package 'sparseLTSEigen'; both package names from memmory > and I > > | >> > may have > > | >> > | mistyped). He reported a performance gain of around 25% > for his > > | >> > problem > > | >> > | sets. On the 'fastLm' benchmark, we find the fast > Eigen-based > > | >> > | decompositions > > | >> > | to be much faster than Armadillo. > > | >> > | > > | >> > | | Can you call LAPACK or BLAS from either? Is there a > wrapper in > > | >> > RcppEigen > > | >> > | to > > | >> > | | call LAPACK functions? Want some other decomposition > methods, > > | >> > dont like > > | >> > | the > > | >> > | | JacobiSVD method in Eigen. > > | >> > | > > | >> > | You need to differentiate between the Eigen and Armadillo > docs > > | >> > _for their > > | >> > | libraries_ and what happens when you access the Rcpp* > variant from > > | >> > R. > > | >> > | > > | >> > | RcppArmadillo will use the very same LAPACK and BLAS libs > your R > > | >> > session > > | >> > | uses. So MKL, OpenBlas, ... are all options. Eigen > actually has > > | >> > its own > > | >> > | code > > | >> > | outperforming LAPACK, so it doesn't as much there. > > | >> > | > > | >> > | Hope this helps, Dirk (at useR!) > > | >> > | > > | >> > | | > > | >> > | | > > | >> > > ---------------------------------------------------------------------- > > | >> > | | _______________________________________________ > > | >> > | | Rcpp-devel mailing list > > | >> > | | Rcpp-devel@lists.r-forge.r-project.org > > | >> > | | > > | >> > > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel > > | >> > | -- > > | >> > | Dirk Eddelbuettel | e...@debian.org | > http://dirk.eddelbuettel.com > > | >> > | > > | >> > | > > | >> > > > | >> > -- > > | >> > Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com > > | >> > _______________________________________________ > > | >> > Rcpp-devel mailing list > > | >> > Rcpp-devel@lists.r-forge.r-project.org > > | >> > > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel > > | > > > | > > > > > -- > > Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com >
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel