より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

CythonをGoogle Colaboratoryで試してみる

なんとなく、Cythonを読んでいたのですがいいですね。

www.oreilly.co.jp

Cythonを使ったからといって全てのコードが大幅に早くなる訳ではない。バレートの法則に従い、ボトルネックに使うのが良いそうです。

NumpyなどのライブラリではCythonでCを持ち込むことでハイパフォーマンスを確保しています。

Google Colaboratoryを使って試してみます。

Google Coraboratoryは、python3.6(2019/7/28時点)ですので、特にpip install cythonでインストールのも必要ありません。

f:id:rimever:20190728222647p:plain

%load_ext Cython

を宣言し、

%%cython

def primes(int kmax):
    cdef int n, k, i
    cdef int p[1000]
    result = []
    if kmax > 1000:
        kmax = 1000
    k = 0
    n = 2
    while k < kmax:
        i = 0
        while i < k and n % p[i] != 0:
            i = i + 1
        if i == k:
            p[k] = n
            k = k + 1
            result.append(n)
        n = n + 1
    return result

cythonで宣言した関数を

primes(10)

と呼び出せばOKです。

f:id:rimever:20190728222910p:plain

Cythonのcdefなどを用いる時には、セルごとに

%%cython

と指定するのがポイントですかね。

参考サイト

omake.accense.com

qiita.com