summaryrefslogtreecommitdiff
path: root/pyspike/spikes.py
diff options
context:
space:
mode:
authorMario Mulansky <mario.mulansky@gmx.net>2014-09-16 15:07:10 +0200
committerMario Mulansky <mario.mulansky@gmx.net>2014-09-16 15:07:10 +0200
commiteb076dcd9d76ed3b848c78fb067c1ad6a1d6da23 (patch)
tree7b924db0be9b6958253ba967eea7fd98dc516493 /pyspike/spikes.py
parent5ea0fc218bb3bb30b1c40dd20e2e35a8bd11151c (diff)
added merge spikes test
Diffstat (limited to 'pyspike/spikes.py')
-rw-r--r--pyspike/spikes.py28
1 files changed, 16 insertions, 12 deletions
diff --git a/pyspike/spikes.py b/pyspike/spikes.py
index 66ef554..6b2eea3 100644
--- a/pyspike/spikes.py
+++ b/pyspike/spikes.py
@@ -18,7 +18,7 @@ def spike_train_from_string(s, sep=' '):
return np.fromstring(s, sep=sep)
-def merge_spike_trains( spike_trains ):
+def merge_spike_trains(spike_trains):
""" Merges a number of spike trains into a single spike train.
Params:
- spike_trains: list of arrays of spike times
@@ -28,15 +28,19 @@ def merge_spike_trains( spike_trains ):
# get the lengths of the spike trains
lens = np.array([len(st) for st in spike_trains])
merged_spikes = np.empty(np.sum(lens))
- index = 0
- indices = np.zeros_like(lens)
- vals = [spike_trains[i][indices[i]] for i in xrange(len(indices))]
- while len(indices) > 0:
- i = np.argmin(vals)
- merged_spikes[index] = vals[i]
- index += 1
- indices[i] += 1
- if indices[i] >= lens[i]:
- indices = np.delete(indices, i)
- vals = [spike_trains[i][indices[i]] for i in xrange(len(indices))]
+ index = 0 # the index for merged_spikes
+ indices = np.zeros_like(lens) # indices of the spike trains
+ index_list = np.arange(len(indices)) # indices of indices of spike trains
+ # that have not yet reached the end
+ # list of the possible events in the spike trains
+ vals = [spike_trains[i][indices[i]] for i in index_list]
+ while len(index_list) > 0:
+ i = np.argmin(vals) # the next spike is the minimum
+ merged_spikes[index] = vals[i] # put it to the merged spike train
+ i = index_list[i]
+ index += 1 # next index of merged spike train
+ indices[i] += 1 # next index for the chosen spike train
+ if indices[i] >= lens[i]: # remove spike train index if ended
+ index_list = index_list[index_list != i]
+ vals = [spike_trains[i][indices[i]] for i in index_list]
return merged_spikes