Re: multiplying, element wise, a row by each column of a matrix.

*To*: mathgroup at smc.vnet.net*Subject*: [mg126985] Re: multiplying, element wise, a row by each column of a matrix.*From*: Thomas Dowling <thomasgdowling at gmail.com>*Date*: Fri, 22 Jun 2012 02:59:29 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*References*: <201206210919.FAA16006@smc.vnet.net>

One possibility: ReplacePart[#, {1 -> v[[1]] #[[1]], 2 -> v[[2]] #[[2]]}] & /@ mat Tom Dowling On Thu, Jun 21, 2012 at 10:19 AM, Nasser M. Abbasi <nma at 12000.org> wrote: > Any one can think of a better way to do this? > > The problem: Given a row vector > > v={v1,v2} > > and matrix with same number of columns as v, such as > > mat={{a11, a12}, > {a21, a22}, > {a31, a32}}; > > I need to multiply v1 by the first column, then > multiply v2 by the second column. (i.e. scale each column > of the matrix by the corresponding "weight" from the > row). > > This results in > > {{a11 v1, a12 v2}, > {a21 v1, a22 v2}, > {a31 v1, a32 v2}} > > I wanted to find a 'smart' way or good command to do > it, but so far, had to do it the hard way. I'll show 2 > methods. May be you can find a better functional way > to solve this: > > 1) > Transpose[MapThread[#1 #2 &, {v, Transpose[mat]}]] > > This is not natural solution. need to transposes > 2 times. > > 2) > KroneckerProduct[{v[[#]]},mat[[All,#]]]&/@ Range[1,Length[v]] > Transpose[Flatten[%, 1]] > > also not too natural. Faltten, transpose, etc... not good. > > Fyi, using another system, which starts with the letter > 'O' and ends with the letters 'VE', I can do the above > using > > v .* mat > > Where the ".*" above means element by element product. > > I hope the experts here can find a short/better way to do > this. I am sure there is, I just can't find it yet, and > I am not happy with what I came up with so far. > > thanks, > --Nasser > >

**References**:**multiplying, element wise, a row by each column of a matrix.***From:*"Nasser M. Abbasi" <nma@12000.org>