       Re: An easier functional way to divide each Column of matrix by a row vector, element-wise?

• To: mathgroup at smc.vnet.net
• Subject: [mg127070] Re: An easier functional way to divide each Column of matrix by a row vector, element-wise?
• From: "Nasser M. Abbasi" <nma at 12000.org>
• Date: Thu, 28 Jun 2012 04:02:01 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com

```hello;

I found a better solution.

(after a strong coffee and staring on it for sometime)

method(5)
-----------
mat = {{a1,a2},{b1,b2}};
v   = {v1,v2};
Inner[Divide,mat,v,List]

Out= { {a1/v1, a2/v2}, {b1/v1,b2/v2} }

But I can't say though it was easy and intuitive to find
for me but at least the above solution is a functional and
I think the right Mathematica way of doing it. So I am
happy. Was good practice though.

--Nasser

On 6/27/2012 8:13 PM, Nasser M. Abbasi wrote:
> I have a list like this 'mat' and 'v' like this
>
> mat = { {a1,a2},{b1,b2} }
> v   = {v1,v2}
>
> I want to generate
>
> mat={  {a1/v1,  a2/v2}, { b1/v1, b2/v2 } }
>
> I can't just do  mat/v since this does
>
> mat={  {a1/v1,  a2/v1}, { b1/v2, b2/v2 } }
>
> I solved this 2 ways, but I am still not happy.
> I think there should be an easier way.
>
> method 1  (not too natural)
> -------------------------------
> Clear["Global`*"]
> mat={{a1,a2},{b1,b2}};
> v={v1,v2};
> Transpose[Transpose[mat]/v]
>
> Out= { {a1/v1, a2/v2}, {b1/v1,  b2/v2} }
>
> method 2 (too complicated)
> ---------------------------
> In:= MapIndexed[Divide[#1,v[[#2[]]]]&,mat,{2}]
>
> Out= { {a1/v1, a2/v2}, {b1/v1, b2/v2}}
>
> method 3 (using a Table, oh no !)
> ------------------------------------
> In:= Table[mat[[i,j]]/v[[j]],{i,2},{j,2}]
>
> Out= {{a1/v1, a2/v2} , {b1/v1, b2/v2} }
>
> method 4 (a not good way to do it )
> ----------------------------------------
> In:= mat.v/.Plus->List/.Times->Divide
>
> Out= {{a1/v1, a2/v2}, {b1/v1, b2/v2}}
>
> I looked at real Mathematical tricks using Inenr and Outer and
> something like this, but I do see a way so far. (I also did not
> have my morning coffee yet), so I wanted to ask if
> someone can see one of those elegant super functional
> correct ways to do this.
>
> ps. fyi, in that other system (starts with O and ends with VE)
> I can do this like this:
>
> mat=[1 2;3 4]
> v=[5 10]
> bsxfun(@rdivide,mat,v)
>
>      0.20000   0.20000
>      0.60000   0.40000
>
> thanks,
> --Nasser
>

```

• Prev by Date: Re: Approximate Zero Times A Symbol
• Next by Date: Re: Extracting Information from XBRL Files
• Previous by thread: An easier functional way to divide each Column of matrix by a row vector, element-wise?
• Next by thread: Re: An easier functional way to divide each Column of matrix by a row vector, element-wise?