Re: Unusual speedup of Table

*To*: mathgroup at smc.vnet.net*Subject*: [mg25610] Re: Unusual speedup of Table*From*: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>*Date*: Mon, 16 Oct 2000 03:04:36 -0400 (EDT)*Organization*: Universitaet Leipzig*References*: <8s1798$ii7@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Hi, try Developer`SetSystemOptions["TableCompileLength" -> 20000] Timing[Table[a[[j + 1]] - 2 a[[j]] + a[[j - 1]], {j, 2, n - 1}];] and you will get the speed of your Table[Switch[]] version. I would expect that the compilation of the Part[] calls are translated into compiled reference to an external {{1, 3}, {26, Function[{j}, a], 2, 0, 0, 3, 0, 0}, {9, 1, 1}, {29, 0, 1, 1}, {26, Function[{j}, a], 2, 0, 0, 3, 0, 1}, {9, 1, 2}, {29, 0, 2, 2}, {27, Part, 3, 0, 1, 2, 0, 2, 3, 0, 2}, {9, 2, 3}, {26, Function[{j}, a], 2, 0, 0, 3, 0, 3}, {26, Function[{j}, a[[j]]], 2, 0, 0, 3, 0, 5}, {19, 1, 3, 6}, {34, 6, 5, 3}, {38, 3, 4}, {26, Function[{j}, a], 2, 0, 0, 3, 0, 5}, {9, -1, 3}, {29, 0, 3, 3}, {26, Function[{j}, a], 2, 0, 0, 3, 0, 6}, {9, -1, 4}, {29, 0, 4, 4}, {27, Part, 3, 0, 6, 2, 0, 4, 3, 0, 7}, {30, 2, 4, 7, 0}, {4, 0}} and the Function[{j}, a[[j]]] will destroy the usual speed up for compilation. While {{1, 3}, {26, Function[{j}, Which[j == _, a[[j + 1]] - 2*a[[j]] + a[[j - 1]]]], 2, 0, 0, 3, 0, 0}, {4, 0}} make a much lower number of function calls. Regards Jens SATether wrote: > > Why is the second call of Table below so much faster than the first? These > results are from Mathematica 4.0.2.1 for Power Mac (400 MHz PPC 750, OS 9). It > isn't some kind of cache effect because the times are consistent over many > executions of both expressions. (And yes, I know I can do a lot better still > for this particular computation with Drop and Take). > > - Steve Tether > > n = 10000; > a = Table[Random[], {n}]; > Timing[Table[a[[j + 1]] - 2 a[[j]] + a[[j - 1]], {j, 2, n - 1}];] > > {10.5333 Second, Null} > > Timing[Table[Switch[j, _, a[[j + 1]] - 2 a[[j]] + a[[j - 1]]], {j, 2, n - 1}];] > > {0.7 Second, Null}