目次
本書について
謝辞
本書の構成
本書の想定読者について
動作確認に使用したOSとPythonのバージョン等について
本書のサポートページについて
第1章 科学技術計算とPython
1.1 データで見るPythonの今
- Pythonの台頭
- 教育用言語としてのPython
- 日本におけるPythonの利用は?
1.2 Pythonの基礎知識
- Pythonの開発経緯
- Pythonの特徴
Column Pythonの誕生
- ❶可読性とメンテナンス性
- ❷インタープリタ言語
- ❸スクリプト言語
- ❹グルー言語
- ❺バッテリー内蔵
- ❻充実したエコシステム
- パッケージ管理システム
- Python 2系とPython 3系
Column Pythonのライセンス
1.3 科学技術計算とPythonの関わり
- Pythonが科学技術計算で使われる理由
- Pythonの普及度
- 利用のしやすさ
- なぜPythonを使うのか
- SciPy Stack
- 民間企業とコミュニティ
- Pythonの活用事例
- Pythonの実行速度は本当に遅いのか
- 今回のベンチマークの詳細
Column スタックメモリとヒープメモリ
1.4 まとめ
第2章 ゼロからのシミュレータ開発
2.1 シミュレータを設計する
- ロケットシミュレータ「PyRockSim」
- 機能構成
- プログラム構築の手順
2.2 機能分割とファイル分割
- 機能分割
- 機能実装上の留意点
- ファイル分割とimport
2.3 コーディング
- 処理の流れ
- ライブラリのimport
- ロケット諸元の設定
- 状態量の設定と積分計算
- メイン実行コード
- 計算結果の確認
2.4 静的コード解析
- 静的コード解析の目的
- 静的コード解析用ツール
2.5 単体テスト
- ソフトウェアのテスト
- 単体テスト用のツール
- doctest
- unittest
- nose
2.6 デバッグ
- pdb
- pdbが不要なデバッグ
- pdbが必要なデバッグ
2.7 プログラムの最適化
- まずはプロファイリング
- 先人の成果を活用する
- さらなる高速化へ
2.8 まとめ
第3章 IPythonとSpyder
3.1 IPython
- IPythonとは
- IPythonを使うには
Column Jupyter
- Jupyter Notebook上での利用
- IPythonの基本 入力と出力の関係から
- オブジェクトの中身を確認する
- 関数の内容表示
- 関数の詳細な内容表示
- オブジェクト名を検索する
- マジックコマンド ラインマジック,セルマジック
- OSとの連携
- 履歴の利用 history
- 履歴の検索
- タブ補完
- スクリプトファイルの実行
- IPythonによるデバッグ デバッガpdb
- 事後解析デバッギング
- スクリプト指定でデバッガ起動
- 指定の箇所でデバッガ起動
- プロファイリング
- 実行時間計測
- プロファイリングの準備
- 実行時間のプロファイリング
- メモリ使用量のプロファイリング
- メモリプロファイリング対象のソースコード内指定
3.2 Spyder
- Spyderとは
- Spyderの主要な機能
- プログラムエディタ
- プログラムの実行
- Docstringやヘルプの表示 Object inspector
- ワークスペース内の変数を表示 Variable explorer
- データファイルの入出力
- UMD Spyderの隠れた重要な機能
3.3 まとめ
第4章 Pythonの基礎
4.1 記述スタイル
- スクリプトの記述ルール
- エンコーディング
- インデント
- コメント
- PEP
- スクリプトの構成
4.2 オブジェクトと型
- オブジェクト
- 識別子
Column 予約済みの識別子
- データ型(組み込みのデータ型) 重要な型の一覧から
Column イミュータブルとは何か? Pythonの実装はどのようにメモリを用いるか
- 数値の型
- 文字列型
- リスト
- タプル
- バイトおよびバイト配列
- 辞書型
- 集合型
- リテラル
- 文字列リテラル
- 文字列のエスケープシーケンス
- 数値リテラル
- コンテナ型のリテラル
4.3 シーケンス型の操作
- インデキシング
- スライシング
- データ(値)の更新
- リスト内包表記
4.4 集合型と辞書型の操作
- 集合型の操作
- 辞書型の操作
4.5 変数とデータ
- 変数の新規作成 Pythonの場合
- C言語の場合
- 変数の再定義 Pythonの場合
- C言語の場合
- 参照の割り当て 基本的な参照割り当ての例から
- 参照割り当て後の再定義
- 2変数への同一リストの割り当て
4.6 浅いコピーと深いコピー
- 浅いコピー
- 複合オブジェクトでない場合
- 複合オブジェクトの場合
- 深いコピー
4.7 演算子と式評価
- ブール値判定とブール演算
- 比較演算子
- 数値の型の演算
- 整数のビット演算
4.8 フロー制御
- if文
- for文
Column スペース(空白文字)の使い方
- while文
- try文
- with文
4.9 関数の定義
- 関数定義の基本
- オプションパラメータ
- 可変長引数とキーワード引数
- lambda式
- ジェネレータ関数
- デコレータ
- 手続き型言語
4.10 モジュールとパッケージ
- ライブラリ,モジュール,パッケージ
- importの基本
- パッケージのimport
- ファイル検索の順番
4.11 名前空間とスコープ
- 名前空間
- スコープ
- 関数におけるスコープと名前空間
- 名前空間と変数操作
- global文とスコープ拡張
- nonlocalとスコープ拡張
- クロージャ
4.12 まとめ
第5章 クラスとオブジェクトの基礎
5.1 クラス定義
- 本章における解説項目について
- クラス定義の基本形
- クラス属性とインスタンス属性
- コンストラクタとデストラクタ
5.2 継承
- 基底クラスと派生クラス
- 継承後の属性の再定義と新規追加
5.3 スタティックメソッドとクラスメソッド
- スタティックメソッド
- クラスメソッド
5.4 隠ぺいの方法
- 情報隠ぺいとカプセル化
- プライベートメンバの指定
5.5 クラスと名前空間
- 名前空間とスコープの生成
- クラス属性とインスタンス属性
5.6 まとめ
第6章 入力と出力
6.1 コンソール入出力
- コンソール入力
- コンソール出力
6.2 ファイル入出力の基本
- open関数
- open関数のモード
- ファイルの読み込みとクローズ
- ファイルへのデータ書き出し
6.3 データファイルの入出力
- 入出力によく使われるデータ形式
- CSVファイルの入出力
- 標準モジュールcsv
- NumPyのCSV読み込み用関数
- Excelファイルの入出力
- XLS形式の入出力
- OOXML形式の入出力
- pickleファイルの入出力
- 単一変数のpickle化
- 複数変数のpickle化
- その他のバイナリファイルの入出力
- NumPyのnpy/npz形式
- HDF5形式
- MAT-file形式
Column HDF5
6.4 pandasのデータ入出力機能
- pandasのデータ入出力関数
- データ形式と入出力速度
- テキストデータの入出力
- 読み込み処理の詳細
6.5 Web入力
- urllibパッケージを用いたHTMLデータの読み出し
- Python 2系とPython 3系のurllib関連情報
6.6 まとめ
Column 入力設定の試行錯誤
第7章 NumPy
7.1 NumPyとは
- NumPyの機能全貌
- NumPyの各種関数群
- NumPyはなぜ速い?
Column 線形代数の数値演算ライブラリ
7.2 NumPyのデータ型
- 細分化されたデータ型
- NumPyの組み込みデータ型
- NumPyのスカラー
7.3 多次元配列オブジェクトndarray
- 配列と行列
- ndarrayの生成
- データ型の指定
- ndarrayの属性
- ndarrayのメソッド
- ndarrayによる行列計算
- ndarrayのインデキシング
- 基本インデキシングによる参照
- 応用インデキシングによる参照
- ビューとコピー
- データとメモリの関係
7.4 ユニバーサル関数
- ユニバーサル関数「ufunc」の機能
- Python関数のufunc化
7.5 ブロードキャスティング
- ブロードキャスティングの仕組み
- ブロードキャスティングの具体例
- 次元に関する注意事項
7.6 まとめ
第8章 SciPy
8.1 SciPyとは
- SciPyの概要
- NumPyとの関係
- 最適化で一歩先を行くSciPy
- SciPyとNumPyの差を調べる
8.2 実践SciPy
- 統計分布関数
- 離散フーリエ解析
Column Pythonの統計処理
- ボード線図
- データの内挿
- デジタル信号フィルタの設計
- 行列の分解
8.3 まとめ
第9章 Matplotlib
9.1 Matplotlibとは
- Matplotlibの概要
- Matplotlibのモジュール
- Matplotlibのツールキット
- pylabとpyplotとNumPyの関係
9.2 Matplotlibの設定
- 2つの設定方法
- 設定の確認と,設定コマンドによる変更
- 設定ファイルへの記述
- スタイルシート
- グラフに日本語を使う
9.3 実践Matplotlib
- 基本の描画
- サブプロット
- 等高線図
- 3次元プロット
Column カラーマップについて
9.4 その他の作図ツール
- Matplotlib以外のおもな作図ツール
9.5 まとめ
第10章 pandas
10.1 pandasとは
- pandasの概要
- PyData
- pandasで何ができる?
10.2 pandasのデータ型
- 基本のデータ型
- シリーズ
- データフレーム
- パネル
10.3 データの処理
- pandasのAPI
- NumPyとの連携機能 ユニバーサル関数,データ型の変換
- 部分データを取り出す
- 基本的な演算規則
- 比較演算
- 基礎的な統計関数
- 関数の適用
- NaNの処理
- プロット機能
- ビューとコピー
10.4 まとめ
第11章 プログラムの高速化
11.1 プログラムの高速化の基本
- 高速化への4つのアプローチ
11.2 ボトルネックの解消
- ボトルネックの解消
- コーディング方法による高速化
- 先入観を持たずに試してみる
- 極力Pythonの組み込み関数や標準ライブラリを使う
- ループ計算(for,while)を極力避ける
- メモリ利用の効率化
- メモリのマネジメント
- ndarrayに関する省メモリ化
- プロファイラの有効活用
- IPythonを使わない関数プロファイリング
- プロファイリング結果のグラフィカル表示
- IPythonを使わないラインプロファイリング
11.3 処理の並列化
- CPUの性能向上
- GIL
Column Intel Xeon Phi
- SIMD
- IntelのSIMD拡張命令
- PythonにおけるSIMD活用
Column Intel MKL
- スレッドとマルチスレッド化
- マルチスレッドのプログラム
- 並行だが並列じゃない
- マルチスレッド化による処理速度向上について
- マルチプロセス利用
Column 注目を集めるGPU
- マルチプロセス利用の利点
- ProcessPoolExecutor
Column Blazeエコシステム
11.4 まとめ
第12章 プログラム高速化の応用例
12.1 高速ライブラリ(他言語)の活用
- 他言語ライブラリのパッケージ
- Cython Cythonは拡張言語
- Cythonの機能
- Cythonの使い方
- Cythonコード作成からコンパイルまで
- Cythonコードの実行時コンパイル
- Cythonによる並列プログラミング例 NumPyプログラムのCythonコード化から
- setupスクリプトの作成例
- 高速化の効果検証
- 自作のC/C++ライブラリの活用
- 自作C/C++ライブラリのコンパイル
- ライブラリのimport方法
12.2 JITコンパイラ利用
- Numba
Column Julia
- 基本的な使い方
- どのようなプログラムに使えるか
- Numbaのデコレータ
- Numbaの利用例(@jitclass)
- Numbaの利用例(ufunc作成)
- Numbaの利用例(マルチスレッド化)
- Numexpr