that makes sense, thanks for the reply

On 13 June 2012 05:53, Uwe Ligges <lig...@statistik.tu-dortmund.de> wrote:

>
>
> On 11.06.2012 11:45, Ceci Tam 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
>>
>
>
> 1. As others have said already, for huge data, the Matrix implementation
> for diagonals is the right idea, since it actually does know how to
> calculate things without actually using and saving the elements of the
> diagonal explicitly.
>
> 2. Such a huge matrix (23000x23000) does not work on all available
> machines and the OP tried to make the example code portable.
>
> 3. What timing do you expect?
> I'd expect (assuming O(n) for the numbers of elements in the matrix) a
> ratio of round(23000^2/5000^2)=21 and actually you reported round(15/0.7)=21
>
>
> Best,
> Uwe Ligges
>
>
>  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.weylandt@**gmail.com<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.graves@**structuremonitoring.com<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<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>
>>>>>>>>>> <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<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>
>>>>>>>> <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<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>
>>>> <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<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>
>>>> <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<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.

Reply via email to