> On 4 Nov 2016, at 17:35, peter dalgaard <pda...@gmail.com> wrote:
> 
> Notice though, that Bert loses (or _should_ lose) for larger values of N, 
> since that method involves O(N^3) operations whereas the other two are 
> O(N^2). I am a bit surprised that sweep() is so inefficient even at N=1000.

I also got different results on Mac OS X (with R 3.3.1 and vecLib BLAS):

Unit: milliseconds
                        expr      min       lq     mean   median       uq       
max neval
         {     t(y * t(x)) } 18.46369 19.61954 25.77548 21.24242 22.72943  
88.03469   100
       {     x %*% diag(y) } 28.12786 29.87109 37.83814 31.59671 32.77839 
101.68553   100
 {     sweep(x, 2, y, `*`) } 11.19871 12.76442 21.48670 14.51618 15.70665 
100.51444   100

Note that sweep() is considerably _faster_ than the other two methods (which I 
found quite surprising).

Of course, if you care about speed (and memory efficiency), you could also

        library(wordspace)
        scaleMargins(x, cols=y)

Best,
Stefan

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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