speed01.py
import time
def test01():
time01 = time.time()
str1 = ""
for i in range(1000000):
str1 += str(i)
time02 = time.time()
print("test01でかかった時間:{:.6f}s".format(time02 - time01))
def test02():
time01 = time.time()
lst1 = []
for i in range(1000000):
lst1.append(str(i))
str1 = "".join(lst1)
time02 = time.time()
print("test02でかかった時間:{:.6f}s".format(time02 - time01))
test01()
test02()
実行結果:
test01でかかった時間:1.515000s
test02でかかった時間:0.330000s
※joinを利用した方がスピードは速いです
speed02.py
import time
def test01():
time01 = time.time()
n = 0
sum = 0
while (n < 10000000):
sum += n
n += 1
time02 = time.time()
print("test01でかかった時間:{:.6f}s".format(time02 - time01))
def test02():
time01 = time.time()
sum = 0
for n in range(10000000):
sum += n
time02 = time.time()
print("test02でかかった時間:{:.6f}s".format(time02 - time01))
test01()
test02()
実行結果:
test01でかかった時間:0.970000s
test02でかかった時間:0.559000s
※whileよりforを利用した方がスピードは速いです
speed03.py
from functools import lru_cache
import time
def fibonacci_number1(n):
return n if n < 2 else fibonacci_number1(n - 1) + fibonacci_number1(n - 2)
@lru_cache()
def fibonacci_number2(n):
return n if n < 2 else fibonacci_number2(n - 1) + fibonacci_number2(n - 2)
t1 = time.time()
fibonacci_number1(35)
t2 = time.time()
fibonacci_number2(35)
t3 = time.time()
print("lru_cacheを利用しない場合の所要時間:{:.6f}s".format(t2 - t1))
print("lru_cacheを利用した場合の所要時間:{:.6f}s".format(t3 - t2))
実行結果:
lru_cacheを利用しない場合の所要時間:3.699000s
lru_cacheを利用した場合の所要時間:0.000000s
※場合により、functools.lru_cacheを利用した方が圧倒的に速いです
speed04.py
import time
from math import sqrt
def test01():
time01 = time.time()
for i in range(10000000):
sqrt(33)
time02 = time.time()
print("test01でかかった時間:{:.6f}s".format(time02 - time01))
def test02():
time01 = time.time()
sqrt_in = sqrt
for i in range(10000000):
sqrt_in(33)
time02 = time.time()
print("test02でかかった時間:{:.6f}s".format(time02 - time01))
test01()
test02()
実行結果:
test01でかかった時間:1.631000s
test02でかかった時間:1.533000s
※ローカルの方がスピードは速いです
speed05.py
import time
def test01():
time01 = time.time()
lst = []
for i in range(10000000):
lst.append(i)
time02 = time.time()
print("test01でかかった時間:{:.6f}s".format(time02 - time01))
def test02():
time01 = time.time()
lst = []
append = lst.append
for i in range(10000000):
append(i) # lst.appendの代わりにappendを利用することでスピードが改善できる
time02 = time.time()
print("test02でかかった時間:{:.6f}s".format(time02 - time01))
def test03():
time01 = time.time()
lst = [i for i in range(10000000)]
time02 = time.time()
print("test03でかかった時間:{:.6f}s".format(time02 - time01))
test01()
test02()
test03()
実行結果:
test01でかかった時間:1.023000s
test02でかかった時間:0.686000s
test03でかかった時間:0.542000s
※リスト内包表記の方が速いです
speed06.py
import time
from numba import jit
def test01(x, y):
time01 = time.time()
sum = 0
for i in range(x, y):
sum += i
time02 = time.time()
print("test01でかかった時間:{:.6f}s".format(time02 - time01))
return sum
@jit
def test02(x, y):
time01 = time.time()
sum = 0
for i in range(x, y):
sum += i
time02 = time.time()
print("test02でかかった時間:{:.6f}s".format(time02 - time01))
return sum
sum1 = test01(1, 100000000)
sum2 = test02(1, 100000000)
実行結果:
test01でかかった時間:5.534000s
test02でかかった時間:0.040000s
※JITコンパイラライブラリNumbaを使った方が100倍高速に実行でき、
C言語のようなパフォーマンスを得ることができるようです
※Numbaをインストールする必要があります
なお、anacondaでpythonをインストールした場合、最初からNumbaが入っているようです