目的
Fortran 90で出力したバイナリファイル等をPythonで読み込み解析。
開発で参考になったリンクや注意などをメモ。
書いている人
普段はFortran 90とIDL(Interactive Data Language)。
Pythonはあまり慣れていない。
ライセンスが必要なIDLの代わりにPythonに移行中。
個人的な開発方針
- pylabはGoogle検索で引っかかりにくい。直接numpyやmatplotlibをインポートする。
- from [package] import *は極力やらない。
- サーバ上でも使いたいので、基本的にコンソール上で利用。
環境
Python 3.6.0 |Anacoda 4.3.0 on OS X El Capitan
Python全般
命名規則
PEP8に従う。
[Pythonコーディング規約]PEP8を読み解く
変数名・関数名がsnake_caseを推奨されている。
Fortranが大文字小文字を区別しないため、同種類の命名規則をつけるときに良さそう。
プログラミングでよく使う英単語のまとめ【随時更新】
外国人が語る:英語でクラスやメソッド等の名付け方
うまくメソッド名を付けるための参考情報
モジュール情報
numpyとかscipyとかのバージョンの表示方法
Python Tips:ライブラリ・モジュールの場所を調べたい
変数
Pythonの値渡しと参照渡し
値渡しと参照渡しと参照の値渡しと
デフォが参照の値渡しってことでいいんだろか。
Determine if variable is defined in Python
四則演算 - 数値 - Python入門
ループ
多重ループの回避。
itertools.product
Python で多重ループを回避する
システムコール
ソート
ソート HOW TO
numpyでソート後配列のインデックスを取得
入出力
Fortranの出力ファイルは書式なし出力(データ)と書式あり出力(パラメータ等)。
書式なし出力
Fortranの書式なし出力を読む場合、scipy.io.FortranFileが有用だった。
中身はnumpy.fromfile等で構成されている。
scipy.io.FortranFile
ただし、公式で注意されているように、Fortranでdirect accessやstreamで出力して
numpy.fromfileで読み込んだ方がエンディアンなど気にしなくて良い。
書式あり出力
普通に読む。str.split、str.splitlinesなどを利用。
行末の改行文字に注意。
4.7. テキストシーケンス型 — str
NumPy
配列要素指定
範囲で指定する場合にIDLと違っていて間違えそう。
import numpy as np
np.arange(0,10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(0,10)[3]
# 3
np.arange(0,10)[0:3]
# array([0, 1, 2]) 範囲で指定する場合、右端の要素は含まれない。
一般
配列の形状変換
reshapeで良さそう。
差分計算
基本的には解析なのでひどく遅くならなければ素直に実装。
2. Numpy array (配列) のコツ
numpy.roll
Pythonで色々実装したいときはNumbaなどの高速化。
Numba
matplotlib
基本的にはpyplotで済ませる。
チュートリアル
Anatomy of Matplotlib -- tutorial developed for the SciPy conference
これが一番理解が進みそう。
そのうちちゃんと読みたい。
グローバル設定: rcParams
IDLのSystem Variable(!p.〜, !x.〜など)に相当するものがrcParamsっぽい。
スタートアップファイル(.idl_startup)に相当するものとしては、matplotlibrcを設定すれば良いらしい。
場所は以下。
import matplotlib as mpl
mpl.matplotlib_fname()
とりあえず今のところ以下を設定。
backend : TkAgg # matplotlibの描画ウィンドウを別アプリ扱い。
interactive : True # show()をいちいち書かずにプロットを表示。
xtick.top : True # draw ticks on the top side
ytick.right : True # draw ticks on the right side
xtick.direction : in # direction: in, out, or inout
ytick.direction : in # direction: in, out, or inout
xtick.minor.visible : True # visibility of minor ticks on x-axis
ytick.minor.visible : True # visibility of minor ticks on y-axis
バッチジョブとして図を作る時は、以下の設定を入れる。
import matplotlib.pyplot as plt
plt.rcParams['interactive'] = False
変更したrcParamsはrc_file_defaults()で戻せる。
import matplotlib as mpl
mpl.rc_file_defaults()
rcParamsはmatplotlib.rcdefaults()でも既定値に戻せるが、
こちらはmatplotlibrcで変更した設定も戻ってしまうことに注意。
rc_file_defaults()なら既定値からmatplotlibrcを適用した状態にしてくれる。
体裁全般
いつも使いたい設定はmatplotlibrcに書くと良さそう。
matplotlibやpylabで論文向きの白黒のグラフをプロットする
matplotlib 2.0での変更点
図が一杯あって参考になる。
matplotlibで論文やプレゼン資料用の図を作るためのテクニック4選
あんまり使わないけど棒グラフと凡例。
1次元データ
matplotlib で使える marker を全て試してみる-python
How to do a scatter plot with empty circles in Python?
2次元データ
pcolorはデータが大きくなると遅い。pcolormeshを使う。
カラー
Colormap Reference
Colormap Normalization
フォント
How to change fonts in matplotlib (python)?
配置
matplotlibでグラフの文字サイズを大きくする
Tight Layout guide
Mac OSXでtight_layoutのエラーが出た時の対処法
出力
matplotlib.figure.Figure.savefig
Matplotlibの高解像度画像保存
ウィンドウ
How do I close all pyplot windows (including ones from previous script executions)?
pyplot, figure, axesの違い
stack overflow: Understanding matplotlib: plt, figure, ax(arr)?
AnatomyOfMatplotlib-Part1-Figures_Subplots_and_layouts.ipynb
PyplotとAxesの役割の公式説明
早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話
どうやら本来はfigureでウィンドウを管理し、axesでウィンドウ内の各プロットを管理するもので、
pyplotはそれをスクリプト風に使いやすくしたラッパーらしい。