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