summaryrefslogtreecommitdiff
path: root/pyspike
diff options
context:
space:
mode:
authorMario Mulansky <mario.mulansky@gmx.net>2014-10-16 12:41:43 +0200
committerMario Mulansky <mario.mulansky@gmx.net>2014-10-16 12:41:43 +0200
commit4249dd363e992fe1178c9d76db3f74c5005afb0a (patch)
tree560136e1e0aaa62227ec583f16e09ebec7e3c850 /pyspike
parenta32c32e968368589dc9ca7baf08636a2ce25d4cc (diff)
changed function names distance -> profiles,
added distance functions
Diffstat (limited to 'pyspike')
-rw-r--r--pyspike/__init__.py6
-rw-r--r--pyspike/distances.py105
2 files changed, 91 insertions, 20 deletions
diff --git a/pyspike/__init__.py b/pyspike/__init__.py
index 1bfa7fc..5146507 100644
--- a/pyspike/__init__.py
+++ b/pyspike/__init__.py
@@ -7,7 +7,9 @@ Distributed under the BSD License
__all__ = ["function", "distances", "spikes"]
from function import PieceWiseConstFunc, PieceWiseLinFunc, average_profile
-from distances import isi_distance, spike_distance, \
- isi_distance_multi, spike_distance_multi, isi_distance_matrix
+from distances import isi_profile, isi_distance, \
+ spike_profile, spike_distance, \
+ isi_profile_multi, isi_distance_multi, isi_distance_matrix, \
+ spike_profile_multi, spike_distance_multi
from spikes import add_auxiliary_spikes, load_spike_trains_from_txt, \
spike_train_from_string, merge_spike_trains
diff --git a/pyspike/distances.py b/pyspike/distances.py
index 4ba2bd3..e50772f 100644
--- a/pyspike/distances.py
+++ b/pyspike/distances.py
@@ -14,9 +14,9 @@ from pyspike import PieceWiseConstFunc, PieceWiseLinFunc
############################################################
-# isi_distance
+# isi_profile
############################################################
-def isi_distance(spikes1, spikes2):
+def isi_profile(spikes1, spikes2):
""" Computes the isi-distance profile S_isi(t) of the two given spike
trains. Retruns the profile as a PieceWiseConstFunc object. The S_isi
values are defined positive S_isi(t)>=0. The spike trains are expected
@@ -41,9 +41,24 @@ def isi_distance(spikes1, spikes2):
############################################################
-# spike_distance
+# isi_distance
############################################################
-def spike_distance(spikes1, spikes2):
+def isi_distance(spikes1, spikes2):
+ """ Computes the isi-distance I of the given spike trains. The
+ isi-distance is the integral over the isi distance profile S_isi(t):
+ I = \int_^T S_isi(t) dt.
+ Args:
+ - spikes1, spikes2: ordered arrays of spike times with auxiliary spikes.
+ Returns:
+ - double value: The isi-distance I.
+ """
+ return isi_profile(spikes1, spikes2).avrg()
+
+
+############################################################
+# spike_profile
+############################################################
+def spike_profile(spikes1, spikes2):
""" Computes the spike-distance profile S_spike(t) of the two given spike
trains. Returns the profile as a PieceWiseLinFunc object. The S_spike
values are defined positive S_spike(t)>=0. The spike trains are expected to
@@ -69,11 +84,26 @@ def spike_distance(spikes1, spikes2):
############################################################
-# multi_distance
+# spike_distance
+############################################################
+def spike_distance(spikes1, spikes2):
+ """ Computes the spike-distance S of the given spike trains. The
+ spike-distance is the integral over the isi distance profile S_spike(t):
+ S = \int_^T S_spike(t) dt.
+ Args:
+ - spikes1, spikes2: ordered arrays of spike times with auxiliary spikes.
+ Returns:
+ - double value: The spike-distance S.
+ """
+ return spike_profile(spikes1, spikes2).avrg()
+
+
+############################################################
+# multi_profile
############################################################
-def multi_distance(spike_trains, pair_distance_func, indices=None):
+def multi_profile(spike_trains, pair_distance_func, indices=None):
""" Internal implementation detail, don't call this function directly,
- use isi_distance_multi or spike_distance_multi instead.
+ use isi_profile_multi or spike_profile_multi instead.
Computes the multi-variate distance for a set of spike-trains using the
pair_dist_func to compute pair-wise distances. That is it computes the
@@ -159,41 +189,80 @@ def multi_distance_par(spike_trains, pair_distance_func, indices=None):
############################################################
+# isi_profile_multi
+############################################################
+def isi_profile_multi(spike_trains, indices=None):
+ """ computes the multi-variate isi distance profile for a set of spike
+ trains. That is the average isi-distance of all pairs of spike-trains:
+ S_isi(t) = 2/((N(N-1)) sum_{<i,j>} S_{isi}^{i,j},
+ where the sum goes over all pairs <i,j>
+ Args:
+ - spike_trains: list of spike trains
+ - indices: list of indices defining which spike trains to use,
+ if None all given spike trains are used (default=None)
+ Returns:
+ - A PieceWiseConstFunc representing the averaged isi distance S_isi(t)
+ """
+ return multi_profile(spike_trains, isi_profile, indices)
+
+
+############################################################
# isi_distance_multi
############################################################
def isi_distance_multi(spike_trains, indices=None):
- """ computes the multi-variate isi-distance for a set of spike-trains. That
- is the average isi-distance of all pairs of spike-trains:
- S(t) = 2/((N(N-1)) sum_{<i,j>} S_{i,j},
+ """ computes the multi-variate isi-distance for a set of spike-trains.
+ That is the time average of the multi-variate spike profile:
+ S_isi = \int_0^T 2/((N(N-1)) sum_{<i,j>} S_{isi}^{i,j},
where the sum goes over all pairs <i,j>
Args:
- spike_trains: list of spike trains
- indices: list of indices defining which spike trains to use,
if None all given spike trains are used (default=None)
Returns:
- - A PieceWiseConstFunc representing the averaged isi distance S
+ - A double value representing the averaged isi distance S_isi
"""
- return multi_distance(spike_trains, isi_distance, indices)
+ return isi_profile_multi(spike_trains, indices).avrg()
+
+
+############################################################
+# spike_profile_multi
+############################################################
+def spike_profile_multi(spike_trains, indices=None):
+ """ Computes the multi-variate spike distance profile for a set of spike
+ trains. That is the average spike-distance of all pairs of spike-trains:
+ S_spike(t) = 2/((N(N-1)) sum_{<i,j>} S_{spike}^{i, j},
+ where the sum goes over all pairs <i,j>
+ Args:
+ - spike_trains: list of spike trains
+ - indices: list of indices defining which spike-trains to use,
+ if None all given spike trains are used (default=None)
+ Returns:
+ - A PieceWiseLinFunc representing the averaged spike distance S(t)
+ """
+ return multi_profile(spike_trains, spike_profile, indices)
############################################################
# spike_distance_multi
############################################################
def spike_distance_multi(spike_trains, indices=None):
- """ computes the multi-variate spike-distance for a set of spike-trains.
- That is the average spike-distance of all pairs of spike-trains:
- S(t) = 2/((N(N-1)) sum_{<i,j>} S_{i, j},
+ """ Computes the multi-variate spike distance for a set of spike trains.
+ That is the time average of the multi-variate spike profile:
+ S_{spike} = \int_0^T 2/((N(N-1)) sum_{<i,j>} S_{spike}^{i, j} dt
where the sum goes over all pairs <i,j>
Args:
- spike_trains: list of spike trains
- indices: list of indices defining which spike-trains to use,
if None all given spike trains are used (default=None)
Returns:
- - A PieceWiseLinFunc representing the averaged spike distance S
+ - A double value representing the averaged spike distance S
"""
- return multi_distance(spike_trains, spike_distance, indices)
+ return spike_profile_multi(spike_trains, indices).avrg()
+############################################################
+# isi_distance_matrix
+############################################################
def isi_distance_matrix(spike_trains, indices=None):
""" Computes the average isi-distance of all pairs of spike-trains.
Args:
@@ -212,7 +281,7 @@ def isi_distance_matrix(spike_trains, indices=None):
"Invalid index list."
# generate a list of possible index pairs
pairs = [(i, j) for i in indices for j in indices[i+1:]]
-
+
distance_matrix = np.zeros((len(indices), len(indices)))
for i, j in pairs:
d = isi_distance(spike_trains[i], spike_trains[j]).avrg()