python
1import time 2import numpy as np 3 4NA ='ACGT' 5n = 100000 6s = '' 7N=10 8myBytes = {} 9for n in range(5000,100000,5000): 10 myBytes[n] = (s.join([random.choice(DNA) for i in range(n)])).encode() 11 for j in range(N): 12 st1_time = time.time() 13 xR = makeSuffixArrayByInducedSorting(myBytes[n],256,0,False) 14 et1_time = time.time() 15 lap1_time= et1_time-st1_time 16 np.mean(lap1_time) 17 18 st2_time = time.time() 19 nR = naivelyBuildSA(myBytes[n]) 20 et2_time = time.time() 21 lap2_time = et2_time-st2_time 22 np.mean(lap2_time) 23 print("processing time:{} {} {}".format(np.mean(lap1_time),np.mean(lap2_time), xR==nR))
このようなコードを作成して,n=5000から100000まで5000ずつで変化させた時のn=5000の時にxRとnRを計算してその時の10回の平均を結果としてlap1_timeとlap2_timeで答えとして出力し,その後n=10000について同様の処理を行うというプログラムを書いたつもりでした.
n=100000だけを10回の平均を取るなどせず求めると大体lap2は12秒かかるのに対してこのプログラムで出てきた結果は3秒で明らかにプログラムの動作自体が遅いのでこのような結果になるはずがないのですが,このプログラムが間違っているのでしょうか.lap1の方は大体単体と同じような結果が得られています.
python
1 2import time 3import numpy as np 4 5NA ='ACGT' 6n = 100000 7s = '' 8N=10 9myBytes = {} 10st0_time = time.time() 11for n in range(5000,100000,5000): 12 myBytes[n] = (s.join([random.choice(DNA) for i in range(n)])).encode() 13 lap1_time =0 14 lap2_time =0 15 for j in range(N): 16 st1_time = time.time() 17 xR = makeSuffixArrayByInducedSorting(myBytes[n],256,0,False) 18 et1_time = time.time() 19 lap1_time = et1_time-st1_time +lap1_time 20 st2_time = time.time() 21 nR = naivelyBuildSA(myBytes[n]) 22 et2_time = time.time() 23 lap2_time= et2_time-st2_time + lap2_time 24 ave1=lap1_time/N 25 ave2=lap2_time/N 26 print("processing time:{} {} {}".format(ave1,ave2, xR==nR)) 27print(time.time()-st0_time)