Re: Multiplying a vector over multiple vectors
- To: mathgroup at smc.vnet.net
- Subject: [mg91184] Re: Multiplying a vector over multiple vectors
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Fri, 8 Aug 2008 07:17:21 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g7ed6u$2pm$1@smc.vnet.net>
Donald DuBois wrote: > How does one get a vector to distribute over > a list of vectors under multiplication? > > For example: > > {{1,2}, {3,4}, {5,6}} times {a,b} should > equal (under this operation) > > {{a, 2b}, {3a, 4b}, {5a, 6b}} > > If {a,b} is duplicated three times one can > use MapThread as in: > > MapThread[Times, {{{1, 2}, {3, 4}, {5, 6}}, {{a, b}, {a, b}, {a, b}}}] > > but duplicating {a,b} using Table is very slow > when the vectors are large (consisting of thousands > of elemets). FWIW, here are some possible ways with their respective timings: In[1]:= lst = RandomInteger[{-100, 100}, {10^5, 2}]; Array[{lst[[#, 1]] a, lst[[#, 2]] b} &, Length@lst]; // Timing // First # {a, b} & /@ lst; // Timing // First MapThread[Times, {lst, Table[{a, b}, {Length[lst]}]}]; // Timing // First MapThread[Times, {lst, ConstantArray[{a, b}, Length[lst]]}]; // Timing // First Table[{lst[[i, 1]] a, lst[[i, 2]] b}, {i, Length@lst}]; // Timing // First Transpose[{a lst[[All, 1]], b lst[[All, 2]]}]; // Timing // First Out[2]= 0.555598 Out[3]= 0.522737 Out[4]= 0.510453 Out[5]= 0.474941 Out[6]= 0.407999 Out[7]= 0.323102 Regards, -- Jean-Marc
- Follow-Ups:
- Re: Re: Multiplying a vector over multiple vectors
- From: Andrzej Kozlowski <akoz@mimuw.edu.pl>
- Re: Re: Multiplying a vector over multiple vectors