前提・実現したいこと
time 0.03 ID:1,KPHN,942,845,1065,961 time 0.06 ID:1,KPHN,938,841,1062,958 time 0.09 ID:1,KPHN,938,841,1062,958 time 0.12 ID:5,KPHN,956,905,1094,991 time 0.15 ID:5,KPHN,956,905,1094,992 time 0.18 ID:7,KPHN,980,913,1151,1008 time 0.21 ID:7,KPHN,982,914,1151,1007 time 0.24 ID:7,KPHN,975,910,1153,1008 . . .
上のようなデータをホークス過程データとしてプロットしたいです
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3 4# hyperparameters 5mu = 0.1 6alpha = 1.5 7beta = 30 8 9# 10neuton_iter_num = 200 11num_datapoints = 15 12 13# step1 14U = np.random.uniform(0, 1) 15# step2 16t1 = -np.log(U)/mu 17t = [t1] 18 19 20for k in range(num_datapoints): 21 # step3 22 U = np.random.uniform(0, 1) 23 24 # step 4 25 if k == 0: 26 Sk = 1 27 28 u = t[k] - np.log(U)/mu # initial value of iteration 29 for _ in range(neuton_iter_num): 30 fu = np.log(U) + mu*(u-t[k]) + alpha/beta*Sk*(1-np.exp(-beta*(u-t[k]))) 31 fu_dash = mu+alpha*Sk*np.exp(-beta*(u-t[k])) 32 u -= fu/fu_dash 33 34 # step 5 35 t.append(u) 36 Sk = np.exp(-beta*(t[k+1]-t[k]))*Sk + 1 # find S(k+1) 37 38t = np.array(t)/max(t) 39 40# plt.figure(figsize=(20, 10), dpi=50) 41# plt.scatter(t, np.ones(len(t)), facecolors='none', edgecolors='red') 42# plt.show() 43 44 45# intensity 46time = np.linspace(0,1,10000) 47increase = list(map(lambda x: alpha*np.exp(-beta * x), time)) 48intensity = np.zeros(10000*2) 49for timepoints in t: 50 yuko = np.append(np.append(np.zeros(len(time[time<timepoints])), increase), np.zeros(len(time[time>=timepoints]))) 51 intensity += yuko 52 53 54# plt.figure(figsize=(20, 10), dpi=50) 55# plt.plot(time, intensity[:10000]) 56# plt.show() 57 58 59 60fig, ax1 = plt.subplots(figsize=(20, 5)) 61ax2 = ax1.twinx() 62ax1.scatter(t, np.ones(len(t)), facecolors='none', edgecolors='red', marker='*', s=150) 63ax2.plot(time, intensity[:10000], c='b', lw=1) 64plt.show()
試したこと
上のソースは下記のサイトの人の書いているソースコードになります
このような書き方をすればプロットできるんだなとは思いましたがいまいち中身が理解できていません
ソース内でどのようにデータを扱っているかなどを教えていただいたり上のようなデータは工やったら扱えるよみたいなのがあったら教えていただきたいです
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。