Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

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