Nest创建神经元,并显示电压变化曲线

  1. nest 安装与介绍

NEST(神经模拟工具)最初是在 1990 年代后期开发的。它的主要目标是作为计算神经科学模拟器。它支持具有不同生物学细节水平的各种神经元和突触模型。例如,NEST 的神经元模型范围从泄漏积分和激发模型到详细的 Hodgkin-Huxley 模型。 NEST 是用 C++ 编写的,但有一个称为 PyNEST 的 Python 接口。该模拟器支持多线程混合并行化和 MPI 多节点模拟。它可以灵活地从单核笔记本电脑扩展到多节点超级计算机 。NEST 实现离散事件模拟;因此,NEST 的性能很大程度上取决于网络中的活动量。

nest的安装现在主要有2.x和3.x,安装的步骤可以在官网上直接找到

Install NEST — NEST Simulator Documentation

这里我建议安装3.x,python版本不能带太低,建议3.8.10以后的

详细的介绍我就不说了,具体的可以自己百度,主要开始敲代码

  1. 创建神经元并显示电压变化曲线
import matplotlib.pyplot as plt
import nest
import nest.voltage_trace

nest.ResetKernel()
#设置仿真精度
nest.resolution = 0.001
#创建了一个HH的神经元
neuron = nest.Create("hh_psc_alpha")
#用来测量神经元的膜电位的变化情况
voltmeter = nest.Create("voltmeter")
#给HH神经元进行一个恒定的电流注入
neuron.I_e = 376.0
#将检测器和神经元进行链接
nest.Connect(voltmeter, neuron)
#开始仿真
nest.Simulate(10.0)
#可以直接调用nest提供的api函数访问电压的变化
#nest.voltage_trace.from_device(voltmeter)

#但是有时候需要自定义电压低变化曲线
# 第一种方式,通过GetStatus获取检测起的状态,返回一个tupple
# 然后通过字典访问相应的数据
# events = nest.GetStatus(voltmeter, 'events')
# V_m = events[0]['V_m']
# times = events[0]['times']

#第二种方式是直接通过检测器提供的get函数获取
V_m = voltmeter.get('events','V_m')
times = voltmeter.get('events','times')

plt.plot(times,V_m,label="Membrane potential")
plt.axhline(y = 20,color='r',linestyle='--',label='Threshold Voltage')
plt.xlabel("Time (%s)")
plt.ylabel("Membrane potential (mV)")
plt.title("Action Potential")
plt.legend()
plt.show()

运行结果如下:

  1. 经典神经元的电压变化曲线
# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import nest
import nest.voltage_trace

nest.ResetKernel()

nest.resolution = 0.001
#创建神经元
hh = nest.Create("hh_psc_alpha")
lif = nest.Create("iaf_cond_alpha")
izhi = nest.Create("izhikevich")

#创建检测器
voltmeter = nest.Create("voltmeter",3)

hh.I_e = 376.0
lif.I_e = 376.0
izhi.I_e = 376.0

nest.Connect(voltmeter[0], hh)
nest.Connect(voltmeter[1], lif)
nest.Connect(voltmeter[2], izhi)

nest.Simulate(40.0)

#显示多个窗口
fig, axes = plt.subplots(1,3,figsize=(12,4))

#HH
hh_events = nest.GetStatus(voltmeter[0], 'events')
axes[0].plot(hh_events[0]['times'],hh_events[0]['V_m'],label="Membrane potential")
axes[0].set_title("HH")
#LIF
lif_events = nest.GetStatus(voltmeter[1], 'events')
axes[1].plot(lif_events[0]['times'],lif_events[0]['V_m'],label="Membrane potential")
axes[1].set_title("LIF")

#Izhikevich
izhi_events = nest.GetStatus(voltmeter[2], 'events')
axes[2].plot(izhi_events[0]['times'],izhi_events[0]['V_m'],label="Membrane potential")
axes[2].set_title("Izhikevich")

#设置间隙
plt.tight_layout()
plt.show()

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值