summaryrefslogtreecommitdiff
path: root/pyspike/spike_distance.py
diff options
context:
space:
mode:
authorMario Mulansky <mario.mulansky@gmx.net>2015-05-08 18:06:59 +0200
committerMario Mulansky <mario.mulansky@gmx.net>2015-05-08 18:06:59 +0200
commitf688dc2e8616f914040746de845646abb158125d (patch)
tree01229c5fc4a5eee546a365595388c5159a479375 /pyspike/spike_distance.py
parent619ffd7105203938a26075c79a77d63960da9922 (diff)
introduce backend for distance function
isi- and spike distances over complete intervals are now computed without obtaining the profile first. This gives more than x2 performance improvements.
Diffstat (limited to 'pyspike/spike_distance.py')
-rw-r--r--pyspike/spike_distance.py17
1 files changed, 16 insertions, 1 deletions
diff --git a/pyspike/spike_distance.py b/pyspike/spike_distance.py
index 3567585..d727fa2 100644
--- a/pyspike/spike_distance.py
+++ b/pyspike/spike_distance.py
@@ -68,7 +68,22 @@ def spike_distance(spike_train1, spike_train2, interval=None):
:rtype: double
"""
- return spike_profile(spike_train1, spike_train2).avrg(interval)
+ if interval is None:
+ # distance over the whole interval is requested: use specific function
+ # for optimal performance
+ try:
+ from cython.cython_distances import spike_distance_cython \
+ as spike_distance_impl
+ return spike_distance_impl(spike_train1.spikes,
+ spike_train2.spikes,
+ spike_train1.t_start,
+ spike_train1.t_end)
+ except ImportError:
+ # Cython backend not available: fall back to average profile
+ return spike_profile(spike_train1, spike_train2).avrg(interval)
+ else:
+ # some specific interval is provided: compute the whole profile
+ return spike_profile(spike_train1, spike_train2).avrg(interval)
############################################################