集成 ODE 后打印数组中的特定值

Printing specific values from an array after integrating ODE

如果这是一个非常 silly/simple 的问题,我深表歉意。我正在尝试使用 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')" 从中创建图形时,我创建了以下图像:

我想做的,似乎不知道怎么做,是计算出神经元尖峰时t的值(当然尖峰本身是有宽度的,所以只要我与我的测量方式一致,宽度并不重要)。为了保持一致性,我想说神经元在 V 处于峰值时出现尖峰。我对如何做到这一点的想法基本上是说当 V 达到某个值(例如 30)时,让 python 打印它发生的时间(因为它会在每个尖峰发生两次,一次在上升的过程中,一旦下降,我就可以简单地将两者取平均以获得大致的尖峰时间)。问题是我不知道如何告诉 Python 在 V 高于 30 时一直打印,并且找不到任何示例代码来执行此操作。任何人都可以帮忙吗?谢谢! :)

idx = np.argwhere(V > 30)[:,0] # get index of V where the value is > 30 and make it 1-d array t[idx] # the array of t where V > 30

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