Re: help to make code run faster (mathematica v8.01)
- To: mathgroup at smc.vnet.net
- Subject: [mg121391] Re: help to make code run faster (mathematica v8.01)
- From: kristoph <kristophs.post at web.de>
- Date: Tue, 13 Sep 2011 07:21:03 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <j4fhn1$2em$1@smc.vnet.net> <j4i6a7$c0a$1@smc.vnet.net>
On 11 Sep., 13:33, Ray Koopman <koop... at sfu.ca> wrote: > On Sep 10, 4:29 am, kristoph <kristophs.p... at web.de> wrote: > > > > > > > > > > > Hi > > > I'm running out of options in order to make my code run faster. I do > > appreciate any help. I programmed a function named tStat that > > basically sums over two compiled functions. Although, I run the > > function parallel it is still rather slow. Thanks in advance for help. > > Here is what I mean: > > > (*the following 5 lines is just random input data to test the > > function*) > > > resp=RandomReal[10,250]; > > reg=RandomReal[1,250]; > > des=DesignMatrix[Table[{reg[[i]],resp[[i]]},{i,1,Length[reg]}],x,x]; > > fit=LinearModelFit[{des,resp}]; > > h=1.06 StandardDeviation[reg] Length[reg]^(-1/5); > > > (*the two compiled functions which are inputs for the function tStat*) > > > epanKern=Compile[{u}, > > If[Abs[u]<1,3/4 (1-u^2),0] > > ]; > > > val1=Compile[{{rk,_Real},{rj,_Real},{dk,_Real},{dj,_Real}, > > {band,_Real}}, > > rk rj epanKern[(dk-dj)/band]]; > > > (*the following function is rather slow*) > > > tStat[data_,band_,residuals_,leg_]:=Module[{k,j,res=0,var=0}, > > res=ParallelSum[val1[residuals[[k]],residuals[[j]],data[[k]],data[[j]= ],band ], > > {k,1,leg},{j,k+1,leg}]; > > 2 res > > ]; > > > (*executing the function*) > > tStat[reg,h,fit["FitResiduals"],Length[reg]]//AbsoluteTiming > > Think in terms of vectors: > > 1.5 Times @@ Transpose@Subsets[fit["FitResiduals"],{2}] . > Clip[1. - ((Subtract @@ Transpose@Subsets[reg,{2}])/h)^2, {0.,1.}] I tried vectors but not as nice and inspiring as you proposed. Thank you very much.