pythonの処理時間に関する質問です
cythonを実装しています
同じコードを処理時間を速くするために、少し変えて実行、
少し変えて実行というようにしているのですが
なぜか時間がおそくなることがあります
無駄なコードに書いたのかと思って
前のコードを利用しても遅いままです
なにかキャッシュのようなものがたまって
遅くなったりしているのでしょうか
教えていただけるとありがたいです
追記 :
一応このようなコードです
python
1import gamma as gam 2import numpy as np 3import alpha as alp 4import gaussian as gau 5import delta 6import beta as bet 7import sys 8cimport numpy as np 9ctypedef np.float64_t DTYPE_t 10 11def e_step(xs, cor, np.ndarray[DTYPE_t, ndim=1] to_all, np.ndarray[DTYPE_t, ndim=2] to_user, np.ndarray[DTYPE_t, ndim=1] re_all, np.ndarray[DTYPE_t, ndim=2] re_user, np.ndarray[DTYPE_t, ndim=1] wo_all, np.ndarray[DTYPE_t, ndim=2] wo_topic, np.ndarray[DTYPE_t, ndim=1] lo_all, np.ndarray[DTYPE_t, ndim=2] lo_topic, int Region, int Topic,voc,User,location, VOCA, np.ndarray[DTYPE_t, ndim=2] mean, np.ndarray[DTYPE_t, ndim=3] cov): 12 xdata = [] 13 r_u = [] 14 z_u = [] 15 cdef str w 16 cdef np.ndarray[DTYPE_t, ndim=1] cco 17 cdef int r, z 18 for w,v,cco in zip(xs, voc, cor): 19 #xsをユーザとか、場所とかチップスとかに分けている 20 document = ((w.split(":|:")[4])) 21 usr = (w.split(":|:")[0]) 22 loc = (w.split(":|:")[1]) 23 lat = (w.split(":|:")[2]) #緯度 24 lon = (w.split(":|:")[3]) #経度 25 z_b = 0. 26 znum = 0 27 r_b = 0. 28 rnum = 0 29 inde = User.index(usr) #usrに該当するインデックスを持ってくる 30 inde_loc = location.index(loc) 31 g=[] 32 #coordinate = np.array([float(w.split("::")[2]),float(w.split("::")[3])]) 33 34 #すべてのrのなかでDuに割り当てられる確率がもっとも高いrを用いる 35 for r in range(Region): 36 be = bet.beta(re_all, re_user[inde], re_user[inde, r],re_all[r]) #re_all,re_user, re_allはランダムな数(領域数までの間で) 37 de = delta.delta(lo_all, lo_topic[int(w.split(":|:")[6])], lo_all[inde_loc], lo_topic[int(w.split(":|:")[6]), inde_loc]) 38 #print(be,de) 39 try: 40 r_a = be * de * gau.gaussian(cco,mean[r], cov[r]) #r_u,dの更新式(要確認)条件(zベクトル,以前のrベクトル,wordベクトル,locベクトル) 41 except: 42 r_a = be * de 43 """ 44 print cco 45 print "---------" 46 print mean[r] 47 print "---------" 48 print cov[r] 49 """ 50 #すべてのrのなかでもっとも確率が高いrを用いる 51 if r_a > r_b: 52 rnum = r 53 r_b = r_a 54 #すべてのzのなかでDuに割り当てられる確率がもっとも高いzを用いる 55 for z in range(Topic): 56 al = alp.alpha(to_all, to_user[inde],to_user[inde, z],to_all[z]) 57 if len(v) != 0: 58 ga = np.prod([gam.gamma(wo_all, wo_topic[z], wo_all[VOCA.index(wrd)], wo_topic[z, VOCA.index(wrd)]) for wrd in v]) 59 else: 60 ga = gam.gamma(wo_all, wo_topic[z], 0, 0) 61 de = delta.delta(lo_all, lo_topic[z], lo_all[inde_loc], lo_topic[z, inde_loc]) 62 try: 63 z_a = al * ga * de * gau.gaussian(cco,mean[rnum], cov[rnum]) #z_u,dの更新式(要確認)条件(以前のzベクトル,rベクトル,wordベクトル,locベクトル) 64 except: 65 z_a = al * ga * de 66 #print '(%s,%s,%s,%s)%s:%s' %(al,ga,de,gau.gaussian(coordinate,mean[rnum], cov[rnum]) ,z_a, z_b) 67 if z_a > z_b: 68 znum = z 69 z_b = z_a 70 xdata.append(usr+":|:"+loc+":|:"+lat+":|:"+lon+":|:"+document+":|:"+str(rnum)+":|:"+str(znum)) 71 return xdata 72
回答1件
あなたの回答
tips
プレビュー