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.

Reply via email to