Cython
サイソン
C との融合による Python の高速化
- 著者:
- クルト・W.スミス / 中田秀基(スミス, クルト・W. / ナカダ, ヒデモト)
- 出版社:
- オライリー・ジャパン
- 出版日:
- 2015年06月
- ISBN:
- 9784873117270
- 在庫:
- メーカー取り寄せ
なぜ注目されているか
書籍紹介
Python の表現力と C / C++の速さを備えた Cython を使って、高速なシステムを効率的に開発する手法を示す。科学技術計算や統計分析の分野では恒常的にある「Python を高速化したい」というニーズに応える一冊。SciPy の初期の開発とメンテナンスを行っていたことで知られる Enthought 社のコンサルタントである著者がていねいに解説。
技書の森解説
Python のコードが遅い箇所だけを、C の速さに近づけたい。そのための道具が Cython で、『Cython』 (Kurt W. Smith 著、中田 秀基 監訳、長尾 高弘 訳、オライリー・ジャパン、2015 年 6 月刊) はその使い方を基礎から並列処理まで解説した書籍です。副題は C との融合による Python の高速化で、原書は Cython です。版元の紹介文は、Cython を Python プログラムの実装を高速化するコンパイラーであると同時に、C や C++ で書かれたライブラリを Python から利用できるようにするブリッジとしての役割も果たすものと説明し、科学技術計算や統計分析の分野にある Python を高速化したいというニーズに応える一冊と位置づけています。書誌の紹介文によると、著者は SciPy の初期の開発とメンテナンスを行っていたことで知られる Enthought 社のコンサルタントです。
全 13 章の構成、型宣言の基本から C++ のラップと並列処理まで
目次ははじめにと全 13 章、索引で構成されます。1 章「Cython の基本」で Python と C と Cython を関数呼び出しのオーバーヘッドやループ処理の観点から比べ、2 章ではコンパイルと実行の方法として、distutils と cythonize、IPython の %%cython、pyximport、CMake や SCons や Make との組み合わせを扱います。3 章「Cython の深層」は cdef による静的型宣言、def と cdef と cpdef の 3 種類の関数、構造体や列挙型の宣言、ループの書き方を掘り下げ、4 章で多体問題のシミュレーションを題材に Python のコードを Cython へ変換します。5 章は拡張型、6 章は .pyx と .pxd のファイルと cimport 文によるコードの構成です。7 章と 8 章は C と C++ のライブラリのラップに充てられ、8 章では C++ の例外やテンプレート、スマートポインターによるメモリ管理まで項目に並びます。9 章でプロファイリングツール、10 章で NumPy と型付きメモリビュー、11 章でスペクトルノルムの計算を題材にした性能の測定と C による実装との比較を取り上げ、12 章はグローバルインタープリタロックと prange を使ったループの並列処理、13 章「世界の中の Cython」で Cython とほかのプロジェクトを取り上げて締めくくられます。実例の章が 4 章と 11 章の 2 か所に置かれ、文法を学んだあとに実際のコードで確かめる流れと読めます。
Python の遅さの正体と、Cython が効く場所
Python が数値計算のループで遅くなる主な理由は、変数の型が実行時まで決まらない動的型付けにあります。足し算 1 回にも、値の型を調べ、対応する処理を探し、結果を新しいオブジェクトとして作るという手順が挟まり、この積み重ねが内側のループで大きな差になります。Cython は Python に近い文法で書いたコードを C 言語 のコードへ変換し、それを コンパイラー で拡張モジュールにする仕組みで、cdef で変数や関数に C の型を宣言した部分では、こうした実行時の型の確認を省いた C のコードが生成されます。宣言しない部分は Python のオブジェクトとして動くため、全体を書き換えずに、プロファイリングで見つけた重い箇所だけに型を付けていくという段階的な進め方ができます。1 章に「頭を冷やそう」という節が置かれ、9 章がプロファイリングに充てられている構成は、速くなる場所を測ってから手を入れるという順序を重視していると読めます。もう 1 つの柱が既存のライブラリの利用で、C++ のクラスや例外まで Python から扱えるようにする 8 章は、計算の中核を C や C++ で持っている組織にとって、Python との接続を自前で書く手間を減らす選択肢になります。
2015 年刊の前提と、読む前に押さえておきたい知識
本書は 2015 年 6 月刊で、3 章には Python 2 と Python 3 間の橋渡しの節があり、2 章は distutils と cythonize を使う方法を標準的な方法として説明しています。Python の公式文書によると、2023 年 10 月 2 日に公開された Python 3.12 で distutils パッケージは標準ライブラリから削除され、引き続き必要な場合はサードパーティの Setuptools が提供するとされています。そのため 2 章のビルドの手順を Python 3.12 以降で試すときは、ビルドの道具の違いを自分で読み替える前提になります。一方で、静的型宣言の考え方、拡張型、ラップの書き方、型付きメモリビュー、グローバルインタープリタロックと並列処理の関係といった中心の題材は、ビルドの手順ほど環境の変化に左右されにくい部分です。読み進めるには Python の文法とクラスの扱いに慣れていることに加え、ポインターや構造体、ヒープとスタックといった C の基本の考え方を知っていると理解が速くなります。Python そのものを学び始める段階なら、Python 本の選び方 から入門書を先に選ぶほうが近道です。
NumPy を使った計算でも速さが足りない研究者や、C や C++ で書かれた計算ライブラリを Python から使えるようにしたい開発者にとって、本書は Cython の文法、ビルド、ラップ、並列処理までを 1 冊で通して確認できる資料です。2015 年時点の環境を前提にしていることを理解したうえで、高速化の考え方とラップの技法を体系的に身につけたい人に向いています。
言及した記事 (13 件)
Jupyter NotebookでCythonを使う
♡ 83PythonOpenCV-Python & Scikit-image -「必見『OpenCV-Python Tutorials』2」への追記
♡ 45Python, OpenCV, 画像認識, scikit-image, OpenCV-PythonPythonが他の言語に比べて遅いなら、なぜいまだに使われているのですか?
♡ 7Python, C++PyCon JP 2024で「Python x Rust」をテーマに登壇しました(ベンチマークの追加検証あり)
♡ 3Python, Rust, PyO3🔧【PyCharm】Python実行時に「Cython 拡張機能のコンパイルエラー」が出た時の対処法とCythonの基礎解説
♡ 1Python, C++, Pycharm, Cython, MicrosoftBuildデータサイエンス(データ分析、モデル構築)で使える高速化処理に関する参考書
♡ 1Python, Ray, 高速化, 並列処理, DeepSpeedPythonはもう遅い言語ではなくなりましたね
♡ 0Python, Cython, Numba, C, C++箱入り娘の大家族は、普通の家族よりどれぐらい箱入りなのか
♡ 0BFS, 箱入り娘【建築士×Claude】昨日「初夏に書きます」と書いた続編が、翌朝にはもう書けてしまった件 — Python vs Rust 実測 12.17×
♡ 0Rust, DX, ChatGPT, 建築士, ClaudeCode即時的因果性の検出法:Granger分析におけるラグの役割を再考する
♡ 0Python, scikit-learn, statsmodels, ChatGPT, dcor
この本に興味がある方におすすめ
関連する本
関連記事
Python 本の選び方 - 独学の最初の 1 冊から実務品質まで
Python 本の選び方を「動機」から逆算して整理。プログラミング未経験の最初の 1 冊、業務自動化に直結する本、型ヒントとコード品質で実務水準へ進む本まで、2026 年 8 月時点の定番を独学ルートに沿って解説します。
本の選び方に正解はない
どの本を選べばいいか迷って決められない。同じテーマの入門書は扱う基礎が大きく重なるため、どれからでも学べます。確認すべき 1 点と、迷いを終わらせる決め方を解説します。
本に書いてあることが古くても学べることはある
プログラミングの世界は変化が速く、本の内容がすぐ古くなると言われます。でも、古い本からでも学べることはたくさんあります。何が古くなり、何が古くならないのかを解説します。