Re: help to make code run faster (mathematica v8.01)
- To: mathgroup at smc.vnet.net
- Subject: [mg121339] Re: help to make code run faster (mathematica v8.01)
- From: Ray Koopman <koopman at sfu.ca>
- Date: Sun, 11 Sep 2011 07:29:28 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <j4fhn1$2em$1@smc.vnet.net>
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.}]