cython チュートリアル
cythonを使い始める
サーチ…
備考
Cythonとは何ですか?
Cythonプログラミング言語は、Cのような静的型付け、C関数を直接呼び出すことができる機能、およびその他のいくつかの機能によってPythonを強化します。これにより、Pythonのような構文を使用しながらCレベルのパフォーマンスに到達できます。
どのように機能するのですか?
Cythonコードはcython source-to-sourceコンパイラを使用してコンパイルされ、CまたはC ++コードを作成します。これはCコンパイラを使用してコンパイルできます。これにより、Pythonや実行可能ファイルからインポートできる拡張機能を作成することができます。
純粋なPythonとは対照的に、Cythonが達成できる主なパフォーマンスの向上は、CPython APIをバイパスすることによってもたらされます。たとえば、2つの整数を追加する場合、Pythonは各変数の型チェックを実行し、見つかった型を満たすadd関数を見つけ出し、その関数を呼び出します。 Cythonで生成されたCコードでは、型は既に分かっていて、呼び出す関数は1つだけです。したがって、Cythonは特に、型が明確な数学的問題に輝きます。
コードを高速化するためにどのように使用しますか?
一般的な使用例は、Cythonを使用してプログラムをスピードアップしようとするときに、コードをプロファイルし、計算上高価な部分をコンパイル済みのCythonモジュールに移動することです。これにより、大量のコードに対してPython構文を保持し、最も必要な場所で高速化を適用することができます。
Cythonのインストール
Cythonを使用するために、2つのものが含まneeded.The Cythonパッケージ自体、あるcython
(例えばnumpyのための)いくつかのCとPythonライブラリにソース-ソースコンパイラとCythonインターフェイスを。 cython
コンパイラによって生成されたCコードをコンパイルするには、Cコンパイラが必要です。
ステップ1:Cythonのインストール
システムアジノス
Cythonはいくつかのシステムに依存しないパッケージ管理システムと共にインストールできます。これらには、
pipまたはeasy_installを介してPyPI :
$ pip install cython $ easy_install cython
アナコンダを使用してconda:
$ conda install cython
enpkgパッケージマネージャを使用したEnthought Canopy:
$ enpkg cython
また、ソースコードはgithubからダウンロードして、以下を使用して手動でインストールできます。
$ python setup.py install
Ubuntu、Debian
Ubuntuでは、 cython
とcython3
のパッケージを利用できます。これらは、上記のインストールオプションより古いバージョンを提供することに注意してください。
$ apt-get install cython cython3
Windows
Windowsの場合、pipを使用してインストールできる.whlファイルはサードパーティによって提供されます。 .whlファイルのWindowsへのインストールに関する詳細は、 こちらを参照してください 。
手順2:Cコンパイラのインストール
Cythonで生成されたCファイルをコンパイルするには、CおよびC ++のコンパイラが必要です。 gccコンパイラが推奨され、次のようにインストールできます。
Ubuntu、Debian
build-essential
パッケージには、必要なものがすべて含まれています。リポジトリからインストールするには、次のコマンドを使用します。
$ sudo apt-get install build-essential
マック
XCode開発ツールには、gccのようなコンパイラが含まれています 。
Windows
MinGW (Minimalist GNU for Windows)にはWindows版のgccが含まれています。 Visual Studioのコンパイラも使用できます。
こんにちは世界
PythonからPythonファイルを使用するには、CythonのpyxファイルをCコード( cythonized )に変換してコンパイルする必要があります。一般的なアプローチは、拡張モジュールを作成してPythonプログラムにインポートすることです。
コード
この例では、3つのファイルを作成します。
-
hello.pyx
にはCythonコードが含まれています。 -
test.py
はhello拡張を使用するPythonスクリプトです。 -
setup.py
はCythonコードをコンパイルするために使われます。
hello.pyx
from libc.math cimport pow
cdef double square_and_add (double x):
"""Compute x^2 + x as double.
This is a cdef function that can be called from within
a Cython program, but not from Python.
"""
return pow(x, 2.0) + x
cpdef print_result (double x):
"""This is a cpdef function that can be called from Python."""
print("({} ^ 2) + {} = {}".format(x, x, square_and_add(x)))
test.py
# Import the extension module hello.
import hello
# Call the print_result method
hello.print_result(23.0)
setup.py
from distutils.core import Extension, setup
from Cython.Build import cythonize
# define an extension that will be cythonized and compiled
ext = Extension(name="hello", sources=["hello.pyx"])
setup(ext_modules=cythonize(ext))
コンパイル
これは、 cython hello.pyx
を使用してコードをCに変換し、 gcc
を使用してコンパイルすることによって実行できます。より簡単な方法は、distutilsにこれを処理させることです:
$ ls
hello.pyx setup.py test.py
$ python setup.py build_ext --inplace
$ ls
build hello.c hello.cpython-34m.so hello.pyx setup.py test.py
共有オブジェクト(.so)ファイルをPythonからインポートして使用することができるので、 test.py
はtest.py
を実行することができます:
$ python test.py
(23.0 ^ 2) + 23.0 = 552.0