MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

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

  • To: mathgroup at smc.vnet.net
  • Subject: [mg126999] Re: multiplying, element wise, a row by each column of a matrix.
  • From: Alexei Boulbitch <Alexei.Boulbitch at iee.lu>
  • Date: Fri, 22 Jun 2012 05:13:43 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com

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

Hi, Nasser,

The scalar product (Dot[ ]) gives you almost the list like you need. Try this:

Clear[v1, v2];
mat = {{a11, a12}, {a21, a22}, {a31, a32}};
v = {v1, v2};

mat.v

{a11 v1 + a12 v2, a21 v1 + a22 v2, a31 v1 + a32 v2}

Now replace Plus by List:

mat.v /. Plus -> List

{{a11 v1, a12 v2}, {a21 v1, a22 v2}, {a31 v1, a32 v2}}

Have fun, Alexei


Alexei BOULBITCH, Dr., habil.
IEE S.A.
ZAE Weiergewan,
11, rue Edmond Reuter,
L-5326 Contern, LUXEMBOURG

Office phone :  +352-2454-2566
Office fax:       +352-2454-3566
mobile phone:  +49 151 52 40 66 44

e-mail: alexei.boulbitch at iee.lu






  • Prev by Date: Comparison of Contour Plots between Various Programs
  • Next by Date: Re: Default path for opening files
  • Previous by thread: Re: multiplying, element wise, a row by each column of a matrix.
  • Next by thread: How to make Excel import symbolically