Speeding up InterpolatingFunction

• To: mathgroup at smc.vnet.net
• Subject: [mg113298] Speeding up InterpolatingFunction
• From: Thomas Münch <thomas.muench at gmail.com>
• Date: Fri, 22 Oct 2010 01:37:30 -0400 (EDT)

```Dear group,

I am looking for a way to speed up the execution of an
InterpolatingFunction in a particular scenario.

This is what I have:
- a single Real-valued InterpolatingFunction f, defined on the domain
between 0 and 300,000 (representing time in ms)
- a list of roughly 1000 different time-points events= {t1, t2, t3, ....}

What I want:
- I want to evaluate f in the 600 ms preceeding each of the events
- I then want to average all these 600ms-periods
I other words, I want the average time-course of f preceeding the events
(in case you are curious: this is to calculate the spike-triggered
average of neuronal spiking responses)

(* Here is a toy function to try it out: *)

f = Interpolation[{10 Range[0, 30000 - 1], RandomInteger[200,
30000]}\[Transpose], InterpolationOrder -> 0];
events = Sort[RandomSample[Range[300000], 1000]];

(* This code does what I want at a 1-ms resolution, which is enough for
me: *)

result=Mean[Table[f[t],{t,# - 600,#}]&/@events];
ListLinePlot[result]

It requires to call f 600.000 times, which takes about 4 seconds on my
machine. But it scales linearly with the number of events (which could
approach 10000 in some cases).

It takes about the same time as this loop: Do[f[1],{600000}]
In other words, there is nothing inherently inefficient in the code.

However, I need to perform this operation very often (with different f
and different t), so wondered if the particular layout of the problem
allows for a speedup of the calculation.

I tried:
-  to costruct a single InterpolatingFunction from the 1000 time-shifted
versions of f, and evaluate this single function 600 times around time 0
- Parallel evaluation in local kernels
- Working with a Compiled form of f

Everything led to a slow-down, rather than a speed-up.

Any ideas from the experts?

In[251]:= \$Version
Out[251]= "7.0 for Microsoft Windows (32-bit) (February 18, 2009)"

Thank you!
Thomas

```

• Prev by Date: Re: Table of tables
• Next by Date: Non-parametric regression and density estimation package posted to
• Previous by thread: Re: From list to list of arguments
• Next by thread: Re: Speeding up InterpolatingFunction