pip install Cython
ノートブックでCythonを使用するには、IPythonマジックコマンドを使用します。マジックコマンドはパーセント記号で始まり、ワークフローを強化できるいくつかの追加機能を提供します。一般に、マジックコマンドには2つのタイプがあります。
ラインマジックは単一の「%」で表され、操作のために1つのラインのみが入力されます
セルマジックは2つの「%」で表され、複数の入力行で動作します。
はじめましょう:
まず、Cythonを使用できるようにするには、次のコマンドを実行する必要があります。
%load_ext Cython
これで、コードセルでCythonを実行する場合は常に、最初に次の魔法のコマンドをセルに配置する必要があります。
%%cython
これらを完了した後、Cythonコードの記述を開始できます。
通常のPythonコードと比較すると、Cythonの速度は実際にはコード自体に依存します。たとえば、多くの変数を使用して計算コストの高いループを実行している場合、Cythonは通常のPythonコードよりもはるかに優れています。再帰関数はまた、CythonをPythonよりもはるかに高速にします。
これをFibonacciシーケンスで証明しましょう。簡単に言えば、このアルゴリズムは最初の2つの数値を加算することによって次の数値を見つけます。 Pythonで考えられる状況は次のとおりです。
%%cython
def fibonacci(n):if n<0:print("1st fibonacci number= 0")
elif n==1:return0
elif n==2:return1else:returnfibonacci(n-1)+fibonacci(n-2)
コードを実行します。
%%time
fibonacci(39)
結果:
CPU times: user 8.39 s, sys:78.6 ms, total:8.47 s
Wall time:8.43 s
39088169
ご覧のとおり、シーケンス内の39番目の番号を見つけるのに8.39秒かかりました。ここで、ウォール時間とは、関数呼び出しの開始から終了までにかかった合計時間を指します。
次に、魔法のコマンドラインに-aを追加することの違いは何ですか?
%%cython -a
def fibonacci_c(int n):if n<0:print("1st fibonacci number = 0")
elif n==1:return0
elif n==2:return1else:returnfibonacci_c(n-1)+fibonacci_c(n-2)
結果は次のとおりです。
ご覧のとおり、magicコマンドの後に「-a」を追加すると、コード内のPythonの相互作用の量を示すコメントがいくつか届きました。
ここでの目標は、すべての黄色い線を削除し、それらを白い背景にすることです。この場合、Pythonの相互作用はなく、すべてのコードはCで実行されます。
各行の横にある「+」記号をクリックして、PythonコードのC変換を表示することもできます。
コードを実行して、どれだけ速くなるかを確認します。
%%time
fibonacci_c(39)
結果は次のとおりです。
CPU times: user 4.85 s, sys:49.7 ms, total:4.9 s
Wall time:4.89 s
39088169
この例では、CythonはPythonよりも約5.8倍高速です。これは、通常のPythonコードと比較して最大の改善を提供するCythonで時間を節約する能力を明確に示しています。
Recommended Posts