在集成ODE后从阵列中打印特定值

时间:2016-03-27 04:04:07

标签: python arrays ode

如果这是一个非常愚蠢/简单的问题,我道歉。我正在尝试使用Python在嘈杂的网络中建模神经元,我希望计算神经元尖峰之间的时间(即间隙间隔)。我的代码的相关部分如下(博士后帮助我编写代码):

def dALLdt(X, t):
        V, m, h, n = X
        dVdt = (I_app(t)+I_syn(spks,t)-I_Na(V, m, h) - I_K(V, n) - I_L(V)) / C_m
        dmdt = alpha_m(V)*(1.0-m) - beta_m(V)*m
        dhdt = alpha_h(V)*(1.0-h) - beta_h(V)*h
        dndt = alpha_n(V)*(1.0-n) - beta_n(V)*n
        return np.array([dVdt, dmdt, dhdt, dndt])

X = [ic]
for i in t[1:]:
    dx = dALLdt(X[-1],i)
    x = X[-1]+dt*(dx)
    X.append(x)    

X = np.array(X)    
V = X[:,0]        
m = X[:,1]
h = X[:,2]
n = X[:,3]

当我使用标准“plt.plot(t,V,'k')”创建一个图形时,我创建了以下图像:

enter image description here

我想做什么,似乎无法弄清楚怎么做,就是在神经元尖峰时找出t的值(当然尖峰本身有宽度,所以只要我在我是如何测量的,宽度并不重要)。为了保持一致性,我想说当V处于峰值时神经元尖峰。我想到如何做到这一点基本上就是说,当V达到某个值(例如30)时,让python打印它发生的时间(因为它会在每次加标时发生两次,一次在路上,一次在路上然后我可以简单地将两者平均得到一个近似的尖峰时间)。问题是我不知道如何实际告诉Python在V大于30时始终打印并且无法找到任何样本代码。任何人都可以帮忙吗?谢谢! :)

1 个答案:

答案 0 :(得分:1)

  

idx = np.argwhere(V> 30)[:,0]#得到V的索引,其中值为> 30,并使其成为一维阵列     t [idx] #t的数组,其中V> 30

从这个ts子集中,您应该能够进行一些插值以找出峰值时间。