summaryrefslogtreecommitdiff
path: root/examples/perf_isi.py
blob: 8b449467dfd3e3af9d3779b8bbdee8488967c585 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# performance measure of the isi calculation

from __future__ import print_function

import numpy as np
import matplotlib.pyplot as plt
import time
from functools import partial

import pyspike as spk
#import pyspike.distances # for the python functions

def measure_perf(func, loops=10):
    times = np.empty(loops)
    for i in xrange(loops):
        start = time.clock()
        func()
        times[i] = time.clock() - start
    return np.min(times)

print("# approximate number of spikes\tcython time [ms]\tpython time [ms]")

# fix seed to get reproducible results
np.random.seed(1)

# max times
Ns = np.arange(10000, 50001, 10000)
for N in Ns:

    # first generate some data
    times = 2.0*np.random.random(1.1*N)
    t1 = np.cumsum(times)
    # only up to T
    t1 = spk.add_auxiliary_spikes(t1[t1<N], N)

    times = 2.0*np.random.random(N)
    t2 = np.cumsum(times)
    # only up to T
    t2 = spk.add_auxiliary_spikes(t2[t2<N], N)

    t_cython = measure_perf(partial(spk.isi_distance, t1, t2))

    t_python = measure_perf(partial(spk.distances.isi_distance_python, 
                                    t1, t2))
    
    print("%d\t%.3f\t%.1f" % (N, t_cython*1000, t_python*1000))