diag(n) is alright when n = 5e3, it took 0.7 sec on my machine for diag(5e3). However, it's slow when n = 23000, diag(23000) took 15 sec
On 11 June 2012 17:43, Ceci Tam <yeeching...@gmail.com> wrote: > diag(n) is alright when n = 5e3, it took 0.7 sec on my machine for > diag(5e3). However, it's slow when n = 23000, diag(23000) took 15 sec > > On 9 June 2012 06:32, R. Michael Weylandt <michael.weyla...@gmail.com>wrote: > >> On Fri, Jun 8, 2012 at 5:31 PM, R. Michael Weylandt >> <michael.weyla...@gmail.com> wrote: >> > For the matter and hand, you can probably get to it by simply trying >> > base:::diag. In this case, it's not too hard because what you're >> > seeing is the S4 generic that the Matrix package is defining _over_ >> > the regular base function generic. >> >> Sorry -- the regular base function is not a generic in this case. >> Everything else still holds though. (Same tricks to find things work >> with print which becomes both an S3 and S4 generic on loading Matrix) >> >> > >> > More generally, going down the rabbit hole of S4: >> > >> > As it suggests, first try >> > >> > showMethods("diag") >> > >> > and you'll see a long list of types. The parallel to the *.default >> > method is the one with signature "ANY" so you can try that: >> > >> > getMethod("diag", "ANY") >> > >> > which gets you where you need to be. >> > >> > Hope this helps, >> > Michael >> > >> > On Fri, Jun 8, 2012 at 5:11 PM, Spencer Graves >> > <spencer.gra...@structuremonitoring.com> wrote: >> >> How can one get the source code for diag? I tried the following: >> >> >> >> >> >>> diag >> >> standardGeneric for "diag" defined from package "base" >> >> >> >> function (x = 1, nrow, ncol) >> >> standardGeneric("diag") >> >> <environment: 0x0000000009dc1ab0> >> >> Methods may be defined for arguments: x, nrow, ncol >> >> Use showMethods("diag") for currently available ones. >> >> >> >> >> >> How can I look at the code past the methods dispatch? >> >> >> >> >> >>> methods('diag') >> >> [1] diag.panel.splom >> >> Warning message: >> >> In methods("diag") : function 'diag' appears not to be generic >> >> >> >> >> >> So "diag" is an S4 generic. I tried the following: >> >> >> >> >> >>> dumpMethods('diag', file='diag.R') >> >>> readLines('diag.R') >> >> character(0) >> >> >> >> >> >> More generally, what do you recommend I read to learn about S4 >> >> generics? I've read fair portions of Chambers (1998, 2008), which >> produced >> >> more frustration than enlightenment for me. >> >> >> >> >> >> Thanks, >> >> Spencer >> >> >> >> >> >> On 6/8/2012 12:07 PM, Uwe Ligges wrote: >> >>> >> >>> I quickly looked at it, and the difference comes from: >> >>> >> >>> n <- 5e3 >> >>> system.time(x <- array(0, c(n, n))) # from diag() >> >>> system.time(x <- matrix(0, n, n)) # from Rdiag() >> >>> >> >>> Replaced in R-devel. >> >>> >> >>> Best, >> >>> Uwe Ligges >> >>> >> >>> >> >>> >> >>> On 07.06.2012 12:11, Spencer Graves wrote: >> >>>> >> >>>> On 6/7/2012 2:27 AM, Rui Barradas wrote: >> >>>>> >> >>>>> Hello, >> >>>>> >> >>>>> To my great surprise, on my system, Windows 7, R 15.0, 32 bits, an R >> >>>>> version is faster! >> >>>> >> >>>> >> >>>> I was also surprised, Windows 7, R 2.15.0, 64-bit >> >>>> >> >>>> >> >>>> > rbind(diag=t1, Rdiag=t2, ratio=t1/t2) >> >>>> user.self sys.self elapsed user.child sys.child >> >>>> diag 0.72 0.080000 0.81 NA NA >> >>>> Rdiag 0.09 0.030000 0.12 NA NA >> >>>> ratio 8.00 2.666667 6.75 NA NA >> >>>> > >> >>>> > sessionInfo() >> >>>> R version 2.15.0 (2012-03-30) >> >>>> Platform: x86_64-pc-mingw32/x64 (64-bit) >> >>>> >> >>>> locale: >> >>>> [1] LC_COLLATE=English_United States.1252 >> >>>> [2] LC_CTYPE=English_United States.1252 >> >>>> [3] LC_MONETARY=English_United States.1252 >> >>>> [4] LC_NUMERIC=C >> >>>> [5] LC_TIME=English_United States.1252 >> >>>> >> >>>> attached base packages: >> >>>> [1] splines stats graphics grDevices utils datasets methods >> >>>> [8] base >> >>>> >> >>>> other attached packages: >> >>>> [1] fda_2.2.9 Matrix_1.0-6 lattice_0.20-6 zoo_1.7-7 >> >>>> >> >>>> loaded via a namespace (and not attached): >> >>>> [1] grid_2.15.0 tools_2.15.0 >> >>>> > >> >>>> >> >>>> >> >>>> Spencer >> >>>>> >> >>>>> >> >>>>> >> >>>>> Rdiag <- function(n){ >> >>>>> m <- matrix(0, nrow=n, ncol=n) >> >>>>> m[matrix(rep(seq_len(n), 2), ncol=2)] <- 1 >> >>>>> m >> >>>>> } >> >>>>> >> >>>>> Rdiag(4) >> >>>>> >> >>>>> n <- 5e3 >> >>>>> t1 <- system.time(d1 <- diag(n)) >> >>>>> t2 <- system.time(d2 <- Rdiag(n)) >> >>>>> all.equal(d1, d2) >> >>>>> rbind(diag=t1, Rdiag=t2, ratio=t1/t2) >> >>>>> >> >>>>> >> >>>>> Anyway, why don't you create it once, save a copy and use it many >> times? >> >>>>> >> >>>>> Hope this helps, >> >>>>> >> >>>>> Rui Barradas >> >>>>> >> >>>>> Em 07-06-2012 08:55, Ceci Tam escreveu: >> >>>>>> >> >>>>>> Hello, I am trying to build a large size identity matrix using >> >>>>>> diag(). The >> >>>>>> size is around 23000 and I've tried diag(23000), that took a long >> time. >> >>>>>> Since I have to use this operation several times in my program, the >> >>>>>> running >> >>>>>> time is too long to be tolerable. Are there any alternative for >> >>>>>> diag(N)? >> >>>>>> Thanks >> >>>>>> >> >>>>>> Cheers, >> >>>>>> yct >> >>>>>> >> >>>>>> [[alternative HTML version deleted]] >> >>>>>> >> >>>>>> ______________________________________________ >> >>>>>> R-help@r-project.org mailing list >> >>>>>> https://stat.ethz.ch/mailman/listinfo/r-help >> >>>>>> PLEASE do read the posting guide >> >>>>>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html> >> >>>>>> and provide commented, minimal, self-contained, reproducible code. >> >>>> >> >>>> >> >>>> ______________________________________________ >> >>>> R-help@r-project.org mailing list >> >>>> https://stat.ethz.ch/mailman/listinfo/r-help >> >>>> PLEASE do read the posting guide >> >>>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html> >> >>>> and provide commented, minimal, self-contained, reproducible code. >> >> >> >> >> >> ______________________________________________ >> >> R-help@r-project.org mailing list >> >> https://stat.ethz.ch/mailman/listinfo/r-help >> >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html> >> >> and provide commented, minimal, self-contained, reproducible code. >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. >> > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.