[Date Index]
[Thread Index]
[Author Index]
Re: Speed of repeated matrix calculation
*To*: mathgroup at smc.vnet.net
*Subject*: [mg49774] Re: [mg49717] Speed of repeated matrix calculation
*From*: DrBob <drbob at bigfoot.com>
*Date*: Fri, 30 Jul 2004 06:02:26 -0400 (EDT)
*References*: <200407291143.HAA10250@smc.vnet.net>
*Reply-to*: drbob at bigfoot.com
*Sender*: owner-wri-mathgroup at wolfram.com
Here are three ways to do it, with timings for a smaller problem:
n=1000;
x=Array[f,{n,3}];
v=Array[h,{3,3}];
Timing[a=Tr[x.v.Transpose[x],List];]
Timing[b=Table[x[[i]].v.x[[i]],{i,1,n}];]
Timing[c=(#.v.#&)/@x;]
a == b == c
{5.594 Second,Null}
{0.031 Second,Null}
{0.032 Second,Null}
True
The first method clearly isn't competitive. Eliminating it and increasing the problem size, I get:
n=7000;
x=Array[f,{n,3}];
v=Array[h,{3,3}];
Timing[b=Table[x[[i]].v.x[[i]],{i,1,n}];]
Timing[c=(#.v.#&)/@x;]
b == c
{0.234 Second,Null}
{0.203 Second,Null}
True
For the other problem, the following methods are very fast.
n=7000;
x=Array[f,{n,3}];
y=Array[g,{n,3}];
v=Array[h,{3,3}];
Timing[a=Table[x[[i]].y[[i]],{i,1,n}];]
Timing[b=Inner[Dot,dum@@x,dum@@y,List];]
a == b
{0.093 Second,Null}
{0.063 Second,Null}
True
But the first is really the same as your method; are you using an older version of Mathematica, perhaps?
Bobby
On Thu, 29 Jul 2004 07:43:39 -0400 (EDT), Gregory Lypny <gregory.lypny at videotron.ca> wrote:
> Hello everyone,
>
> Just curious to know whether I'm doing this repeated matrix calculation
> efficiently by using the Table command.
>
> I've got matrices x and y, which are both 7000x3, and a matrix V which
> is 3x3.
>
> If I create a 7000x1 vector, q, whose elements are equal to each of the
> row quadratic forms x.V.x, I can do it by creating a table.
>
> q = Table[{x[[i, All]].V.x[[i, All]]}, {i, 1, 7000}];
>
> The calculation is done in a split second on a G4 iBook.
>
> However, if I use Table to create a 7000x1 vector, d, of the dot
> products of the rows of x and y, the calculation takes more than two
> minutes!
>
> d = Table[{x[[i, All]].y[[i, All]]}, {i, 1, 7000}];
>
> Why the big difference in time? Is there a better way?
>
> Greg
>
>
>
--
DrBob at bigfoot.com
www.eclecticdreams.net
Prev by Date:
**Re: ListDensityPlot, ColorFunction, and associated confusions**
Next by Date:
**Re: ListDensityPlot (solution, and critical comment))**
Previous by thread:
**Speed of repeated matrix calculation**
Next by thread:
**Re: Speed of repeated matrix calculation**
| |