```Date: Jul 2, 2012 10:17 PM
Author: Dana DeLouis
Subject: Re: An easier functional way to divide each Column of matrix by a row

> mat = {{a1,a2},{b1,b2}};> v   = {v1,v2};> Inner[Divide,mat,v,List]Hi.  The ideas given by others in the similar thread (about multiplying) could apply here.Just divide instead.   For example:mat={{a1,a2},{b1,b2}};v={v1,v2};// YoursInner[Divide,mat,v,List]{{a1/v1,a2/v2},{b1/v1,b2/v2}}Map[#/v &,mat]{{a1/v1,a2/v2},{b1/v1,b2/v2}}%% == %True// Your other example:mat = {{1,2},{3,4}};v={5,10};Inner[Divide,mat,v,List]{{1/5,1/5},{3/5,2/5}}Map[#/v &,mat]{{1/5,1/5},{3/5,2/5}}%% == %TrueIf one inverts the vector at the start, one has the same solution as the other tread using Times.mat={{a1,a2},{b1,b2}};v=1 / {v1,v2};Map[# * v &, mat]{{a1/v1,a2/v2},{b1/v1,b2/v2}}= = = = = = = = = =HTH  :>)Dana DeLouisMac & Math 8= = = = = = = = = =On Jun 28, 4:03 am, "Nasser M. Abbasi" <n...@12000.org> wrote:> 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[61]= { {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[93]= { {a1/v1, a2/v2}, {b1/v1,  b2/v2} }> > > method 2 (too complicated)> > ---------------------------> > In[94]:= MapIndexed[Divide[#1,v[[#2[[2]]]]]&,mat,{2}]> > > Out[94]= { {a1/v1, a2/v2}, {b1/v1, b2/v2}}> > > method 3 (using a Table, oh no !)> > ------------------------------------> > In[96]:= Table[mat[[i,j]]/v[[j]],{i,2},{j,2}]> > > Out[96]= {{a1/v1, a2/v2} , {b1/v1, b2/v2} }> > > method 4 (a not good way to do it )> > ----------------------------------------> > In[108]:= mat.v/.Plus->List/.Times->Divide> > > Out[108]= {{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
```