59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib.gridspec as gridspec
|
|
from plotstyle import *
|
|
|
|
def random_walk(n, p, rng):
|
|
steps = rng.rand(n)
|
|
steps[steps>=1.0-p] = 1
|
|
steps[steps<1.0-p] = -1
|
|
x = np.hstack(((0.0,), np.cumsum(steps)))
|
|
return x
|
|
|
|
def random_walk_neuron(n, p, thresh, rng):
|
|
x = random_walk(n, p, rng)
|
|
spikes = []
|
|
j = -1
|
|
i = 1
|
|
while i > 0:
|
|
if j > 0:
|
|
spikes.append(j+i)
|
|
j += i + 1
|
|
x[j:] -= x[j]
|
|
i = np.argmax(x[j:] >= thresh - 0.1)
|
|
return x, spikes
|
|
|
|
|
|
if __name__ == "__main__":
|
|
fig = plt.figure()
|
|
spec = gridspec.GridSpec(nrows=1, ncols=2, width_ratios=[2, 1], wspace=0.4,
|
|
**adjust_fs(fig, left=6.5, right=1.5))
|
|
ax = fig.add_subplot(spec[0, 0])
|
|
rng = np.random.RandomState(52281)
|
|
p = 0.6
|
|
thresh = 10.0
|
|
nmax = 500
|
|
n = np.arange(0.0, nmax+1, 1.0)
|
|
x, spikes = random_walk_neuron(nmax, p, thresh, rng)
|
|
ax.axhline(0.0, **lsGrid)
|
|
ax.axhline(thresh, **lsAm)
|
|
ax.plot(n, x, **lsBm)
|
|
for tspike in spikes:
|
|
ax.plot([tspike, tspike], [12.0, 16.0], **lsC)
|
|
ax.set_xlabel('Time')
|
|
ax.set_ylabel('Potential')
|
|
ax.set_xlim(0, nmax)
|
|
ax.set_ylim(-10, 17)
|
|
ax.set_yticks(np.arange(-10, 11, 10))
|
|
ax = fig.add_subplot(spec[0, 1])
|
|
nmax = 100000
|
|
x, spikes = random_walk_neuron(nmax, p, thresh, rng)
|
|
isis = np.diff(spikes)
|
|
ax.hist(isis, np.arange(0.0, 151.0, 10.0), **fsAs)
|
|
ax.set_xlabel('ISI')
|
|
ax.set_ylabel('Count')
|
|
ax.set_xticks(np.arange(0, 151, 50))
|
|
ax.set_yticks(np.arange(0, 401, 100))
|
|
fig.savefig("randomwalkneuron.pdf")
|
|
plt.close()
|