Cython ―Cとの融合によるPythonの高速化

Book description

強力なライブラリを豊富に備え、科学計算から統計分析、金融工学まで利用が広がるPython。スクリプト言語とは思えない高速性の秘密が、NumPyやSciPyなどのPythonパッケージで広く使われているCythonです。CythonはPythonプログラムの実装を高速化するコンパイラであると同時に、C/C++で書かれたライブラリをPythonから利用できるようにするブリッジとしての役割も果たします。本書はPythonの表現力とC/C++の速さを備えたCythonを使って、高速なシステムを効率的に開発する手法を示します。科学技術計算や統計分析の分野では恒常的にある「Pythonを高速化したい」というニーズに応える一冊です。

Table of contents

  1. はじめに (1/2)
  2. はじめに (2/2)
  3. 目 次 (1/2)
  4. 目 次 (2/2)
  5. 1章 Cythonの基本
    1. 1.1 Python、C、Cythonの比較
      1. 1.1.1 関数呼び出しのオーバーヘッド
      2. 1.1.2 ループ処理
      3. 1.1.3 算術演算
      4. 1.1.4 スタックとヒープ
    2. 1.2 頭を冷やそう
    3. 1.3 CythonによるCコードのラップ
    4. 1.4 まとめ
  6. 2章 Cythonコードのコンパイルと実行
    1. 2.1 Cythonのコンパイルパイプライン
      1. 2.1.1 コンパイラのインストールとセットアップのテスト
    2. 2.2 標準的な方法:distutilsとcythonizeを使う方法
      1. 2.2.1 使用するdistutilsスクリプト
      2. 2.2.2 Mac OS X、Linuxでのdistutilsを使うコンパイル
      3. 2.2.3 Windowsでのdistutilsを使うコンパイル
      4. 2.2.4 拡張モジュールの使い方
    3. 2.3 IPythonの%%cythonを使う対話的Cython
    4. 2.4 pyximportによるその場でのコンパイル
      1. 2.4.1 pyximportの制御と依存関係の管理
      2. 2.4.2 外部依存コードがあるときのpyximportの例
    5. 2.5 手作業でのコンパイル
    6. 2.6 Cythonとほかのビルドシステムの組み合わせ
      1. 2.6.1 CMakeとCython
      2. 2.6.2 SConsとCython
      3. 2.6.3 MakeとCython
    7. 2.7 コンパイラディレクティブ
    8. 2.8 まとめ
  7. 3章 Cythonの深層
    1. 3.1 インタープリタによる実行とコンパイラによる実行
    2. 3.2 動的な型付けと静的な型付け
    3. 3.3 cdefによる静的型宣言
      1. 3.3.1 Cythonにおける自動型推論
      2. 3.3.2 CythonにおけるCポインタ
      3. 3.3.3 静的に型付けされた変数と動的に型付けされた変数の併用
      4. 3.3.4 Python型の静的な宣言
      5. 3.3.5 スピードを得るための静的型付け
      6. 3.3.6 参照カウント管理と静的文字列型
    4. 3.4 Cythonの3種類の関数
      1. 3.4.1 defキーワードによるCython内のPython関数
      2. 3.4.2 cdefキーワードによるCython内のC関数
      3. 3.4.3 cpdefによるdef関数とcdef関数の融合
      4. 3.4.4 関数と例外処理
      5. 3.4.5 関数とembedsignatureコンパイラディレクティブ
    5. 3.5 強制型変換とキャスト
    6. 3.6 構造体、共用体、列挙型の宣言
    7. 3.7 ctypedefによる型エイリアス
    8. 3.8 Cythonのforループとwhileループ
      1. 3.8.1 効率のよいループを生成するためのガイドライン
      2. 3.8.2 ループの例
    9. 3.9 Cythonプリプロセッサ
    10. 3.10 Python 2とPython 3間の橋渡し
      1. 3.10.1 str、unicode、bytesについて
    11. 3.11 まとめ
  8. 4章 Cythonの実際:多体問題シミュレーション
    1. 4.1 Pythonによる多体問題コードの概要
    2. 4.2 Cythonへの変換
      1. 4.2.1 Pythonでのデータ構造と構成
      2. 4.2.2 Pythonデータ構造からC構造体への変換
      3. 4.2.3 Cython化バージョンの実行
    3. 4.3 まとめ
  9. 5章 Cythonと拡張型
    1. 5.1 Pythonのクラスと拡張型の比較
    2. 5.2 Cythonの拡張型
    3. 5.3 型の属性とアクセス制御
    4. 5.4 Cレベルの初期化とクリーンアップ
    5. 5.5 cdefメソッドとcpdefメソッド
    6. 5.6 継承とサブクラス化
      1. 5.6.1 キャストとサブクラス
      2. 5.6.2 拡張型のオブジェクトとNone
    7. 5.7 Cythonにおける拡張型プロパティ
    8. 5.8 特殊メソッドはさらに特殊
      1. 5.8.1 算術演算メソッド
      2. 5.8.2 リッチ比較
      3. 5.8.3 イテレータのサポート
    9. 5.9 まとめ
  10. 6章 Cythonコードの構成
    1. 6.1 Cythonの実装(.pyx)、宣言(.pxd)ファイル
    2. 6.2 cimport文
      1. 6.2.1 定義済みの定義ファイル
    3. 6.3 インクルードファイルとinclude文
    4. 6.4 Pythonパッケージ内のCythonモジュールの構成とコンパイル
    5. 6.5 まとめ
  11. 7章 CythonによるCライブラリのラップ
    1. 7.1 Cythonにおける外部Cコードの宣言
      1. 7.1.1 Cythonはラップを自動化しない
    2. 7.2 外部C関数とtypedefの宣言
    3. 7.3 Cの構造体、共用体、列挙型の宣言とラップ
    4. 7.4 C関数のラップ
    5. 7.5 拡張型を使ったC構造体のラップ
    6. 7.6 const、その他の修飾子、Cythonが生成するコードの制御
    7. 7.7 エラーチェックと例外の生成
    8. 7.8 コールバック
      1. 7.8.1 コールバックと例外の伝播
    9. 7.9 まとめ
  12. 8章 CythonによるC++ライブラリのラップ
    1. 8.1 単純な例:MT_RNGクラス
      1. 8.1.1 ラッパー拡張型
      2. 8.1.2 C++によるコンパイル
      3. 8.1.3 Pythonからのラッパーの使い方
      4. 8.1.4 多重定義されたメソッドと関数
      5. 8.1.5 多重定義された演算子
    2. 8.2 C++例外
    3. 8.3 C++インスタンスのスタックおよびヒープ上のメモリ割り当て
    4. 8.4 C++クラス階層の取り扱い
    5. 8.5 C++テンプレート
      1. 8.5.1 テンプレート関数とCythonの融合型
      2. 8.5.2 テンプレートクラス
      3. 8.5.3 イテレータと入れ子クラス
      4. 8.5.4 インクルードされたSTLコンテナクラスの宣言
    6. 8.6 メモリ管理とスマートポインタ
    7. 8.7 まとめ
  13. 9章 Cythonのプロファイリングツール
    1. 9.1 Cythonの実行時間のプロファイリング
    2. 9.2 プロファイリングとアノテーション (1/2)
    3. 9.2 プロファイリングとアノテーション (2/2)
    4. 9.3 まとめ
  14. 10章 Cython、NumPy、型付きメモリビュー
    1. 10.1 新しいバッファプロトコルの威力
      1. 10.1.1 memoryview型
    2. 10.2 型付きメモリビュー
      1. 10.2.1 型付きメモリビューの例
      2. 10.2.2 型付きメモリビューデータに対するCレベルのアクセス
      3. 10.2.3 安全性を犠牲にした性能の向上
      4. 10.2.4 型付きメモリビューの宣言
      5. 10.2.5 型付きメモリビューの使い方
      6. 10.2.6 バッファを越えて
    3. 10.3 C、C++配列のラップ
      1. 10.3.1 CythonとC配列の正しい(そして自動的な)メモリ管理
    4. 10.4 まとめ
  15. 11章 Cythonの実際:スペクトルノルム
    1. 11.1 Pythonによるスペクトルノルム計算コードの概要
    2. 11.2 性能のプロファイリング
    3. 11.3 コードのCython化
      1. 11.3.1 静的型情報の追加
      2. 11.3.2 型付きメモリビューの利用
    4. 11.4 Cによる実装との比較
    5. 11.5 まとめ
  16. 12章 Cythonと並列プログラミング
    1. 12.1 スレッドベース並列処理とグローバルインタープリタロック
      1. 12.1.1 関数のnogil属性
      2. 12.1.2 with nogilコンテキストマネージャ
    2. 12.2 prangeを使ったループの並列処理
      1. 12.2.1 prangeの使い方
      2. 12.2.2 prangeのオプション
    3. 12.3 prangeを使ったリダクション
    4. 12.4 並列プログラミングの指針と落とし穴
    5. 12.5 まとめ
  17. 13章 世界の中のCython
    1. 13.1 Cythonとほかのプロジェクト
      1. 13.1.1 その他のPython事前コンパイラ
      2. 13.1.2 Pythonラッパープロジェクト
      3. 13.1.3 Python用実行時コンパイラ
    2. 13.2 まとめ
  18. 索 引 (1/4)
  19. 索 引 (2/4)
  20. 索 引 (3/4)
  21. 索 引 (4/4)

Product information

  • Title: Cython ―Cとの融合によるPythonの高速化
  • Author(s): Kurt W. Smith, 中田 秀基, 長尾 高弘
  • Release date: June 2015
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873117270

You might also like

book

入門 Python 3 第2版

by Bill Lubanovic, 鈴木 駿, 長尾 高弘

データサイエンスやウェブ開発、セキュリティなど、さまざまな分野で人気を獲得してきているPython。本書は、ベストセラー『入門 Python 3』の6年ぶりの改訂版で、プログラミング初級者を対象としたPythonの入門書です。プログラミングおよびPythonの基礎から、ウェブ、データベース、ネットワーク、並行処理といった応用まで、実践を見据えたPythonプログラミングをわかりやすく丁寧に説明します。Python 3.9に対応し、f文字列などの新機能も追加され大幅にボリュームアップしました。Pythonの機能をひと通り網羅し、リファレンスとしても便利です。

book

データ匿名化手法 ―ヘルスデータ事例に学ぶ個人情報保護

by Khaled El Emam, Luk Arbuckle, 木村 映善, 魔 狸, 笹井 崇司

データがビジネスを駆動する現在、さらなるサービスの進化と利便性を推進するために、個人に関する情報は不可欠です。本書は、機微な個人情報を多く含むヘルスデータを題材に、プライバシー保護とデータ有用性という相反する命題をいかに満たすかについて、豊富な実例とともに紹介します。リスクベースの非特定化方法論、横断的データ、縦断的イベントデータ、データリダクション、地理空間の集約、マスキングなどデータの匿名化に必要な事柄を網羅的に解説。医療者はもちろん、個人のプライバシーを守りつつ、より洗練されたサービスを提供したいエンジニア、データ技術者必携の一冊です。

book

Optimized C++ ―最適化、高速化のためのプログラミングテクニック

by Kurt Guntheroth, 黒川 利明, 島 敏博

本書は性能に影響する要因の特性をしっかり理解し、正しく測定することによって性能上の問題を引き起こしている「ホットスポット」を特定し、どのような最適化が可能であり、採用すべきなのかを詳しく解説します。従来の文や式の最適化、コンパイラオプションだけでなく、性能チューニングの原則と、文字列、アルゴリズム、動的変数割り当て、カスタムライブラリ、探索と整列、データ構造、入出力、並列処理、メモリ管理といったあらゆる角度からの最適化テクニックを、「コード中毒」の著者が実際に直面したエピソードを交え紹介します。より高速なプログラムを必要とするプログラマに不可欠な内容です。C++11/C++14対応。

book

詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識

by Adrian Kaehler, Gary Bradski, 松田 晃一, 小沼 千絵, 永田 雅人, 花形 理

OpenCVの開発者によるベストセラー書の改訂版。最新のC++インタフェースに対応。OpenCVは現在、ロボットの視覚システムだけでなくスマホやパソコンの顔認証、画像アプリやセキュリティ監視の人物検出、製造、医療、自動運転車、ゲームやARアプリ、さらには機械学習に代表される人工知能の研究など、さまざまな分野で利用されています。本書では、カメラ入力やファイル出力といった簡単な使い方から、画像の変換やセグメンテーション、テンプレートマッチング、パターン認識、特徴量、物体や動きのトラッキング、ステレオビジョンからの3Dの再構成、機械学習まで、基礎から丁寧かつ詳細に解説します。関数のリファレンスとしても利用可能です。