np.meshgrid
関数は、x, y, …の各座標の要素列から格子座標を作成するために使います。
例えば、xが0~4、yが0~4の36点の格子点の各座標の要素列を求めたいとしましょう。Pythonコードを使用すると、以下のように求めることもできます。
np.meshgrid
を使用すると、各軸の要素数に応じて柔軟にグリッドを生成することができます。覚えておくと可視化や組み合わせの要素列を作成するときに便利なので、是非この機会に使い方を覚えてみてください。
meshgrid
まずは、meshgrid
関数のAPIドキュメントから見ていきましょう。
numpy.meshgrid(x1, x2,…, xn, indexing=’xy’,sparse=False,copy=True)
params:
パラメータ名 |
型 |
概要 |
x1, x2, ...,xn |
1次元配列 |
それぞれの軸における格子点を求めたい格子の座標を指定します。 |
indexing |
{‘xy’ or ‘ij’} |
(省略可能)初期値’xy’ 生成される配列の形状(shape)をどのように設定するかを指定します。(あとで詳しく解説します) |
sparse |
bool (True or False) |
(省略可能)初期値False
True にするとスパースグリッドの配列を返してメモリを節約します。 |
copy |
bool |
(省略可能)初期値True Falseにすると、メモリを節約するために、元の配列のビューを返します。 |
returns:
指定した各軸の要素列から各軸方向の格子列を返します。
np.meshgrid
の操作は下図のようなイメージになります。x座標とy座標の要素の入った配列を指定すると、各軸のグリッドの要素を返します。
格子点の作成
実際のコードを見ながら使い方を見ていきましょう。
indexing引数を指定
indexing
引数を指定してみます。デフォルトは座標軸順のxy
ですが、ij
にすると行列の順序でグリッドが生成されます。
スパースグリッドでメモリを節約
次に、sparse
を指定します。True
にすると、スパースグリッドを生成して、メモリを節約します。
グラフでの利用
このmeshgrid
関数が最もよく使われるのはmatplotlibを利用したグラフ描画のときでしょう。この関数の機能を使ってグラフを描いていきます。
次のようなコードをファイルにして実行すると、簡単に格子点を作ることができます。
plot1(x, y, ret)
を実行するとが0より大きいかどうかで色分けされた2Dグラフがプロットされます。
plot2(xx, yy, ret)
を実行するとが3Dグラフでプロットされます。
このように、非常に多くの格子点でも数行のコードで実現することができます。