LoginSignup
15
18

More than 1 year has passed since last update.

IDL/FortranユーザがPythonに移行した際のメモ

Last updated at Posted at 2017-03-05

目的

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 で多重ループを回避する

システムコール

17.5. subprocess — サブプロセス管理

ソート

ソート 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で済ませる。

チュートリアル

Pyplot tutorial

matplotlib入門

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のグラフの体裁を整える

matplotlib: 論文用に図の体裁を整える

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を使う。

matplotlib.pyplot.pcolormesh

matplotlib.pyplot.colorbar

matplotlibで等高線やら何やらのプロット

pcolorfastなるものもあるらしい。

カラー

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はそれをスクリプト風に使いやすくしたラッパーらしい。

15
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18