2016-03-27 3 views
3

Прошу прощения, если это очень глупый вопрос. Я пытаюсь моделировать нейрон в шумной сети с использованием Python, и я надеюсь вычислить время между нейронами (например, интервал между интервалами). Соответствующая часть моего кода является следующий (постдки помогла мне код этого):Печать определенных значений из массива после интеграции ODE

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 (т, V,„к“)», Я создаю следующее изображение:

enter image description here

то, что я хотел бы сделать, и, казалось бы, не могу понять, как это сделать, это выяснить, значение т, когда нейрон спайки (конечно, сам шип имеет ширину, поэтому, насколько я согласен в том, как я ее измеряю, эта ширина не имеет большого значения). Для согласованности я хотел бы сказать, что нейронные шипы, когда V находится на пике. Моя мысль о том, как это сделать, состоит в основном в том, чтобы сказать, что когда V достигает определенного значения (например, 30), пусть python напечатает время, когда это произойдет (так как это произойдет дважды за шип, когда-то на пути вверх и один раз в пути вниз, то я могу просто усреднить два, чтобы получить приблизительное время всплеска). Проблема в том, что я понятия не имею, как на самом деле говорить Python, чтобы печатать все время, когда V выше 30 и не смог найти какой-либо пример кода, который это делает. Кто-нибудь может помочь с этим? Спасибо! :)

ответ

1

IDX = np.argwhere (V> 30) [:, 0] индекс # Get из V, где значение> 30 и сделать его 1-D массива т [IDX] # массив t, где V> 30

Из этого подмножества ts вы сможете сделать некоторую интерполяцию, чтобы узнать время пика.

+0

О, это фантастика, спасибо! Я провел с ним образец моделирования, и когда я напечатал idx, он напечатал: «[23012 23013 23014 ..., 178172 178173 178174]», который соответствует сюжету. Мне любопытно, как вы видите значения, где есть ...? – Brenton

+0

t [idx]: Время V [idx]: Значение – Hun

+0

Просто попробовал, но я получаю «[23.012 23.013 23.014 ..., 178.172 178.173 178.174]», что приятно, потому что он говорит мне время, но он не учитывает ряд значений между «...», которые я хочу знать. – Brenton