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 Eric R. Johnston, Nic Harrigan, Mercedes Gimeno-Segovia, 北野 章, 丸山 耕司

独自のシミュレータQCEngineを使ってJavaScriptで書かれたサンプルプログラムをブラウザ上で動かし、量子コンピュータでのプログラミングに必要な知識やスキルを学ぶことができます。量子コンピューティングの基礎とその可能性に関する直感的理解が容易になるよう、豊富な例と図を用いて説明します。前半では、単一キュビットに対する基本的な量子演算、多重キュビット演算、複合演算(量子プリミティブ)、基本的な量子アプリケーション、後半では、探索問題、画像処理、暗号問題、機械学習への応用について解説しており、本書だけで基礎から実践的な応用技術までを一気に習得できます。

book

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

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

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

book

プログラミングC# 第8版

by Ian Griffiths, 木下 哲也, 鈴木 幸敏

C#を体系的に網羅したC#プログラマのバイブルが、C# 8.0に合わせて全面改訂。言語仕様からクラウドも考慮したWebアプリ開発、デスクトップアプリ構築まで、C# 8.0の基本から高度なテクニックまでを詳しく紹介します。C# 8.0では、パターンマッチング、範囲構文、非同期メソッドの大幅拡張、null許容参照をはじめさまざまな新機能の追加と改善がされています。本書はこうした新機能もしっかりとフォロー。詳細な説明と、豊富なサンプルコードを用意し、初心者はもちろん中上級者の要望にも応える一冊です。