本文整理汇总了Python中brian2.groups.neurongroup.NeuronGroup类的典型用法代码示例。如果您正苦于以下问题:Python NeuronGroup类的具体用法?Python NeuronGroup怎么用?Python NeuronGroup使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了NeuronGroup类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
def __init__(self, filterbank, targetvar, *args, **kwds):
self.targetvar = targetvar
self.filterbank = filterbank
filterbank.buffer_init()
# Sanitize the clock - does it have the right dt value?
if 'clock' in kwds:
if int(1/kwds['clock'].dt)!=int(filterbank.samplerate):
raise ValueError('Clock should have 1/dt=samplerate')
kwds['clock'] = Clock(dt=float(kwds['clock'].dt)*second)
else:
kwds['clock'] = Clock(dt=1*second/float(filterbank.samplerate))
buffersize = kwds.pop('buffersize', 32)
if not isinstance(buffersize, int):
buffersize = int(buffersize*self.samplerate)
self.buffersize = buffersize
self.buffer_pointer = buffersize
self.buffer_start = -buffersize
NeuronGroup.__init__(self, filterbank.nchannels, *args, **kwds)
@network_operation(when=(self.clock, 'start'))
def apply_filterbank_output():
if self.buffer_pointer>=self.buffersize:
self.buffer_pointer = 0
self.buffer_start += self.buffersize
self.buffer = self.filterbank.buffer_fetch(self.buffer_start, self.buffer_start+self.buffersize)
setattr(self, targetvar, self.buffer[self.buffer_pointer, :])
self.buffer_pointer += 1
self.contained_objects.append(apply_filterbank_output)
示例2: test_variableview_calculations
def test_variableview_calculations():
# Check that you can directly calculate with "variable views"
G = NeuronGroup(10, '''x : 1
y : volt''')
G.x = np.arange(10)
G.y = np.arange(10)[::-1]*mV
assert_allclose(G.x * G.y, np.arange(10)*np.arange(10)[::-1]*mV)
assert_allclose(-G.x, -np.arange(10))
assert_allclose(-G.y, -np.arange(10)[::-1]*mV)
assert_allclose(3 * G.x, 3 * np.arange(10))
assert_allclose(3 * G.y, 3 *np.arange(10)[::-1]*mV)
assert_allclose(G.x * 3, 3 * np.arange(10))
assert_allclose(G.y * 3, 3 *np.arange(10)[::-1]*mV)
assert_allclose(G.x / 2.0, np.arange(10)/2.0)
assert_allclose(G.y / 2, np.arange(10)[::-1]*mV/2)
assert_allclose(G.x + 2, 2 + np.arange(10))
assert_allclose(G.y + 2*mV, 2*mV + np.arange(10)[::-1]*mV)
assert_allclose(2 + G.x, 2 + np.arange(10))
assert_allclose(2*mV + G.y, 2*mV + np.arange(10)[::-1]*mV)
assert_allclose(G.x - 2, np.arange(10) - 2)
assert_allclose(G.y - 2*mV, np.arange(10)[::-1]*mV - 2*mV)
assert_allclose(2 - G.x, 2 - np.arange(10))
assert_allclose(2*mV - G.y, 2*mV - np.arange(10)[::-1]*mV)
# incorrect units
assert_raises(DimensionMismatchError, lambda: G.x + G.y)
assert_raises(DimensionMismatchError, lambda: G.x[:] + G.y)
assert_raises(DimensionMismatchError, lambda: G.x + G.y[:])
assert_raises(DimensionMismatchError, lambda: G.x + 3*mV)
assert_raises(DimensionMismatchError, lambda: 3*mV + G.x)
assert_raises(DimensionMismatchError, lambda: G.y + 3)
assert_raises(DimensionMismatchError, lambda: 3 + G.y)
示例3: test_state_variable_access
def test_state_variable_access():
for codeobj_class in codeobj_classes:
G = NeuronGroup(10, 'v:volt', codeobj_class=codeobj_class)
G.v = np.arange(10) * volt
assert_equal(np.asarray(G.v[:]), np.arange(10))
assert have_same_dimensions(G.v[:], volt)
assert_equal(np.asarray(G.v[:]), G.v_[:])
# Accessing single elements, slices and arrays
assert G.v[5] == 5 * volt
assert G.v_[5] == 5
assert_equal(G.v[:5], np.arange(5) * volt)
assert_equal(G.v_[:5], np.arange(5))
assert_equal(G.v[[0, 5]], [0, 5] * volt)
assert_equal(G.v_[[0, 5]], np.array([0, 5]))
# Illegal indexing
assert_raises(IndexError, lambda: G.v[0, 0])
assert_raises(IndexError, lambda: G.v_[0, 0])
assert_raises(TypeError, lambda: G.v[object()])
assert_raises(TypeError, lambda: G.v_[object()])
# A string representation should not raise any error
assert len(str(G.v))
assert len(repr(G.v))
assert len(str(G.v_))
assert len(repr(G.v_))
示例4: test_scalar_parameter_access
def test_scalar_parameter_access():
for codeobj_class in codeobj_classes:
G = NeuronGroup(10, '''dv/dt = freq : 1
freq : Hz (shared)
number : 1 (shared)
array : 1''',
codeobj_class=codeobj_class)
# Try setting a scalar variable
G.freq = 100*Hz
assert_equal(G.freq[:], 100*Hz)
G.freq[:] = 200*Hz
assert_equal(G.freq[:], 200*Hz)
G.freq = 'freq - 50*Hz + number*Hz'
assert_equal(G.freq[:], 150*Hz)
G.freq[:] = '50*Hz'
assert_equal(G.freq[:], 50*Hz)
# Check the second method of accessing that works
assert_equal(np.asanyarray(G.freq), 50*Hz)
# Check error messages
assert_raises(IndexError, lambda: G.freq[0])
assert_raises(IndexError, lambda: G.freq[1])
assert_raises(IndexError, lambda: G.freq[0:1])
assert_raises(IndexError, lambda: G.freq['i>5'])
assert_raises(ValueError, lambda: G.freq.set_item(slice(None), [0, 1]*Hz))
assert_raises(IndexError, lambda: G.freq.set_item(0, 100*Hz))
assert_raises(IndexError, lambda: G.freq.set_item(1, 100*Hz))
assert_raises(IndexError, lambda: G.freq.set_item('i>5', 100*Hz))
示例5: test_ipython_html
def test_ipython_html():
G = NeuronGroup(10, '''dv/dt = -(v + Inp) / tau : volt
Inp = sin(2*pi*freq*t) : volt
freq : Hz''')
# Test that HTML representation in IPython does not raise errors
assert len(G._repr_html_())
示例6: test_subexpression
def test_subexpression():
G = NeuronGroup(10, '''dv/dt = freq : 1
freq : Hz
array : 1
expr = 2*freq + array*Hz : Hz''')
G.freq = '10*i*Hz'
G.array = 5
assert_equal(G.expr[:], 2*10*np.arange(10)*Hz + 5*Hz)
示例7: test_indices
def test_indices():
G = NeuronGroup(10, 'v : 1')
G.v = 'i'
ext_var = 5
assert_equal(G.indices[:], G.i[:])
assert_equal(G.indices[5:], G.indices['i >= 5'])
assert_equal(G.indices[5:], G.indices['i >= ext_var'])
assert_equal(G.indices['v >= 5'], np.nonzero(G.v >= 5)[0])
示例8: test_linked_variable_repeat
def test_linked_variable_repeat():
'''
Test a "repeat"-like connection between two groups of different size
'''
G1 = NeuronGroup(5, 'w : 1')
G2 = NeuronGroup(10, 'v : 1 (linked)')
G2.v = linked_var(G1.w, index=np.arange(5).repeat(2))
G1.w = np.arange(5) * 0.1
assert_equal(G2.v[:], np.arange(5).repeat(2) * 0.1)
示例9: test_threshold_reset
def test_threshold_reset():
'''
Test that threshold and reset work in the expected way.
'''
# Membrane potential does not change by itself
G = NeuronGroup(3, 'dv/dt = 0 / second : 1',
threshold='v > 1', reset='v=0.5')
G.v = np.array([0, 1, 2])
run(defaultclock.dt)
assert_equal(G.v[:], np.array([0, 1, 0.5]))
示例10: test_linked_subgroup
def test_linked_subgroup():
'''
Test linking a variable from a subgroup
'''
G1 = NeuronGroup(10, 'x : 1')
G1.x = np.arange(10) * 0.1
G2 = G1[3:8]
G3 = NeuronGroup(5, 'y:1 (linked)')
G3.y = linked_var(G2.x)
assert_equal(G3.y[:], (np.arange(5)+3)*0.1)
示例11: test_linked_var_in_reset_size_1
def test_linked_var_in_reset_size_1():
G1 = NeuronGroup(1, 'x:1')
G2 = NeuronGroup(1, '''x_linked : 1 (linked)
y:1''',
threshold='y>1', reset='y=0; x_linked += 1')
G2.x_linked = linked_var(G1, 'x')
G2.y = 1.1
# In this context, x_linked should not be considered as a scalar variable
# and therefore the reset statement should be allowed
run(3*defaultclock.dt)
assert_equal(G1.x[:], 1)
示例12: test_custom_events
def test_custom_events():
G = NeuronGroup(2, '''event_time1 : second
event_time2 : second''',
events={'event1': 't>=i*ms and t<i*ms+dt',
'event2': 't>=(i+1)*ms and t<(i+1)*ms+dt'})
G.run_on_event('event1', 'event_time1 = t')
G.run_on_event('event2', 'event_time2 = t')
net = Network(G)
net.run(2.1*ms)
assert_allclose(G.event_time1[:], [0, 1]*ms)
assert_allclose(G.event_time2[:], [1, 2]*ms)
示例13: test_linked_subgroup2
def test_linked_subgroup2():
'''
Test linking a variable from a subgroup with indexing
'''
G1 = NeuronGroup(10, 'x : 1')
G1.x = np.arange(10) * 0.1
G2 = G1[3:8]
G3 = NeuronGroup(10, 'y:1 (linked)')
G3.y = linked_var(G2.x, index=np.arange(5).repeat(2))
assert_equal(G3.y[:], (np.arange(5)+3).repeat(2)*0.1)
示例14: test_linked_variable_indexed
def test_linked_variable_indexed():
'''
Test linking a variable with an index specified as an array
'''
G = NeuronGroup(10, '''x : 1
y : 1 (linked)''')
G.x = np.arange(10)*0.1
G.y = linked_var(G.x, index=np.arange(10)[::-1])
# G.y should refer to an inverted version of G.x
assert_equal(G.y[:], np.arange(10)[::-1]*0.1)
示例15: test_random_vector_values
def test_random_vector_values():
# Make sure that the new "loop-invariant optimisation" does not pull out
# the random number generation and therefore makes all neurons receiving
# the same values
tau = 10*ms
G = NeuronGroup(100, 'dv/dt = -v / tau + xi*tau**-0.5: 1')
G.v[:] = 'rand()'
assert np.var(G.v[:]) > 0
G.v[:] = 0
net = Network(G)
net.run(defaultclock.dt)
assert np.var(G.v[:]) > 0