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.
-pd On 04 Nov 2016, at 16:41 , Jeff Newmiller <jdnew...@dcn.davis.ca.us> wrote: > Sara wins on memory use. > > Rui wins on speed. > > Bert wins on clarity. > > library(microbenchmark) > > N <- 1000 > x <- matrix( runif( N*N ), ncol=N ) > y <- seq.int( N ) > > microbenchmark( { t( y * t(x) ) } > , { x %*% diag( y ) } > , { sweep( x, 2, y, `*` ) } > ) > Unit: milliseconds > expr min lq median uq max > neval > { t(y * t(x)) } 6.659562 7.475414 7.871341 8.182623 47.01105 > 100 > { x %*% diag(y) } 9.859292 11.014021 11.281334 11.733825 48.79463 > 100 > { sweep(x, 2, y, `*`) } 16.535938 17.682175 18.283572 18.712342 55.47159 > 100 > > On Fri, 4 Nov 2016, Dimitri Liakhovitski wrote: > >> Nice! >> Thanks a lot, everybody! >> Dimitri >> >> On Fri, Nov 4, 2016 at 10:35 AM, Bert Gunter <bgunter.4...@gmail.com> wrote: >>> My goodness! >>> >>>> x %*% diag(y) >>> >>> [,1] [,2] >>> [1,] 2 12 >>> [2,] 4 15 >>> [3,] 6 18 >>> >>> will do. >>> >>> -- Bert >>> >>> >>> >>> Bert Gunter >>> >>> "The trouble with having an open mind is that people keep coming along >>> and sticking things into it." >>> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) >>> >>> >>> On Thu, Nov 3, 2016 at 2:33 PM, Sarah Goslee <sarah.gos...@gmail.com> wrote: >>>> Like this? >>>> >>>>> sweep(x, 2, y, "*") >>>> [,1] [,2] >>>> [1,] 2 12 >>>> [2,] 4 15 >>>> [3,] 6 18 >>>>> >>>> >>>> >>>> On Thu, Nov 3, 2016 at 5:05 PM, Dimitri Liakhovitski >>>> <dimitri.liakhovit...@gmail.com> wrote: >>>>> Hello! >>>>> >>>>> I have a matrix x and a vector y: >>>>> >>>>> x <- matrix(1:6, ncol = 2) >>>>> y <- c(2,3) >>>>> >>>>> I need to multiply the first column of x by 2 (y[1]) and the second >>>>> column of x by 3 (y[2]). >>>>> >>>>> Of course, I could do this - but it's column by column: >>>>> >>>>> x[,1] <- x[,1] * y[1] >>>>> x[,2] <- x[,2] * y[2] >>>>> x >>>>> >>>>> Or I could repeat each element of y and multiply two matrices - that's >>>>> better: >>>>> >>>>> rep.row<-function(x,n){ >>>>> matrix(rep(x,each=n),nrow=n) >>>>> } >>>>> y <- rep.row(y, nrow(x)) >>>>> x * y >>>>> >>>>> However, maybe there is a more elegant r-like way of doing it? >>>>> Thank you! >>>>> >>>>> -- >>>>> Dimitri Liakhovitski >>>>> >>>> >>>> -- >>>> Sarah Goslee >>>> http://www.functionaldiversity.org >>>> >>>> ______________________________________________ >>>> 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. >> >> >> >> -- >> Dimitri Liakhovitski >> >> ______________________________________________ >> 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. >> > > --------------------------------------------------------------------------- > Jeff Newmiller The ..... ..... Go Live... > DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... > Live: OO#.. Dead: OO#.. Playing > Research Engineer (Solar/Batteries O.O#. #.O#. with > /Software/Embedded Controllers) .OO#. .OO#. rocks...1k > > ______________________________________________ > 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. -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ 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.