CythonでPythonコードを高速化

Cythonをインストールします##

pip install Cython

使い方##

ノートブックでCythonを使用するには、IPythonマジックコマンドを使用します。マジックコマンドはパーセント記号で始まり、ワークフローを強化できるいくつかの追加機能を提供します。一般に、マジックコマンドには2つのタイプがあります。

  1. ラインマジックは単一の「%」で表され、操作のために1つのラインのみが入力されます

  2. セルマジックは2つの「%」で表され、複数の入力行で動作します。

はじめましょう:

まず、Cythonを使用できるようにするには、次のコマンドを実行する必要があります。

%load_ext Cython

これで、コードセルで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

CythonでPythonコードを高速化
グレーレベルの同時発生マトリックス(Pythonコードを使用)
PythonでダイナミックカラーQRコードを作成する
Python | Hypothesisを使用してPythonコードをすばやくテストする
ヘッダー付きのpythonrequests.get
Python(18)入門
Python(9)入門
PythonでWeChatを再生する
Python(8)入門
PythonによるWebスクレイピング
Python入門(2)
python-1入門
PythonSMS爆撃コード
Python(14)入門
Python(7)の使用を開始する
Python(17)入門
Python(15)入門
Python(10)入門
Python(11)入門
Python(6)入門
Python(3)入門
Python(12)入門
Python(5)入門
Python入門(18歳以上)
Python(16)入門
バグを見つけるためのPythonコード(2)
バグを見つけるためのPythonコード(7)
pythonコードにコメントする方法
バグを見つけるためのPythonコード(4)
バグを見つけるためのPythonコード(3)
バグを見つけるためのPythonコード(9)
Python描画ローズ実装コード
Python正規式サンプルコード
Pythonはコードブロックフォールディングを実装します
PythonインストールOpenCVサンプルコード
バグを見つけるためのPythonコード(6)
バグを見つけるためのPythonコード(1)
バグを見つけるためのPythonコード(8)
Pythonは検証コード認識を実装します
pythonコードは大文字と小文字を区別しますか