diff options
author | Mario Mulansky <mario.mulansky@gmx.net> | 2015-05-08 18:06:59 +0200 |
---|---|---|
committer | Mario Mulansky <mario.mulansky@gmx.net> | 2015-05-08 18:06:59 +0200 |
commit | f688dc2e8616f914040746de845646abb158125d (patch) | |
tree | 01229c5fc4a5eee546a365595388c5159a479375 /pyspike/isi_distance.py | |
parent | 619ffd7105203938a26075c79a77d63960da9922 (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/isi_distance.py')
-rw-r--r-- | pyspike/isi_distance.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/pyspike/isi_distance.py b/pyspike/isi_distance.py index 164378d..2a1ed3a 100644 --- a/pyspike/isi_distance.py +++ b/pyspike/isi_distance.py @@ -66,7 +66,21 @@ def isi_distance(spike_train1, spike_train2, interval=None): :returns: The isi-distance :math:`D_I`. :rtype: double """ - return isi_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 isi_distance_cython \ + as isi_distance_impl + return isi_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 profile averaging + return isi_profile(spike_train1, spike_train2).avrg(interval) + else: + # some specific interval is provided: use profile + return isi_profile(spike_train1, spike_train2).avrg(interval) ############################################################ |