15. Numpyを使う
import numpy as np
a = np.arange(1, 100000001, dtype=np.int64)
print(a.sum())
1から1億が入った配列を用意し、その和を計算する
16. ベンチマーク
s = 0
for i in range(1, 100000001):
s += i
print(s)
s = sum(range(1, 100000001))
print(s)
30.21秒
12.33秒
0.38秒
import numpy as np
a = np.arange(1, 100000001, dtype=np.int64)
print(a.sum())
21. ベンチマーク例
def prime(n):
p = [True] * (n + 1)
m = 2
while m < n + 1:
if p[m]:
i = m * 2
while i < n + 1:
p[i] = False
i += m
m += 1
i = n
while not p[i]:
i -= 1
return i
n以下の最大の素数を返す関数
(エラトステネスのふるい)
通常のPython版:4.75秒 Cython化版:3.04秒
prime(10000000)を計算
(コードには手を入れず)
22. def prime(int n):
cdef int i, m
p = [True] * (n + 1)
m = 2
while m < n + 1:
if p[m]:
i = m * 2
while i < n + 1:
p[i] = False
i += m
m += 1
i = n
while not p[i]:
i -= 1
return i
def prime(n):
p = [True] * (n + 1)
m = 2
while m < n + 1:
if p[m]:
i = m * 2
while i < n + 1:
p[i] = False
i += m
m += 1
i = n
while not p[i]:
i -= 1
return i
型宣言をいれる
3.04秒 0.41秒
23. def prime(int n):
cdef int m, i
cdef int * p = <int * >malloc((n + 1) * sizeof(int))
for i in range(n + 1):
p[i] = 1
m = 2
while m < n + 1:
if p[m]:
i = m * 2
while i < n + 1:
p[i] = 0
i += m
m += 1
i = n
while not p[i]:
i -= 1
free(p)
return i
0.41秒 0.17秒
リスト(配列)についてもC言語風の型宣言と動的割当て