Pythonで2次元メッシュを作る

Pythonで2次元のメッシュを作ります。メッシュと言っても、実際に作るのは行列です。3次元グラフを描く際の、各要素のX成分とY成分を準備するようなイメージです。

目次

  1. numpy.meshgridメソッドの使い方
  2. メッシュグリッドの作成例

numpy.meshgridメソッドの使い方

指定した行列ベクトルで、メッシュグリッドとなる行列を作ります。

import numpy as np

X1, X2 = np.meshgrid(x1, x2, [indexing], [sparse], [copy])
変数 内容
x1, x2, ... array_like グリッドのもとになる1次元の行列。
indexing str 省略可。規定値は'xy'。
sparse bool 省略可。規定値はFalse。
copy bool 省略可。規定値はTrue。
X1, X2, ... ndarray メッシュグリッドとなる行列。

ちょっとわかりにくいですね。

例を挙げてみます。

xが0から4まで、yが0から2までのメッシュグリッドを考えてみましょう。x方向に0から4までの数字を、y方向に0から2までの数字を入れます。

  0 1 2 3 4
0          
1          
2          

グリッドの各枡に、xの値とyの値を(x,y)のように入れてみます。

  0 1 2 3 4
0 (0,0) (1,0) (2,0) (3,0) (4,0)
1 (0,1) (1,1) (2,1) (3,1) (4,1)
2 (0,2) (1,2) (2,2) (3,2) (4,2)

この表から、xの部分と、yの部分を取り出します。

まずx部分。

0 1 2 3 4
0 1 2 3 4
0 1 2 3 4

そしてy部分。

0 0 0 0 0
1 1 1 1 1
2 2 2 2 2

はい、できあがりました。

これをどう使うかというと、z = f(x, y)というようなxとyの値によって決まるzが2次元の行列として得られる場合に、z[i, j]のxとy成分がx[i, j]とy[i,j]で得られるようになるわけです。 そうすると、3次元プロットなどするときにインデックスだけ指定すれば良いので便利なのですね。

メッシュグリッドの作成例

試してみましょう。

>>> import numpy as np

# xとyの作成
>>> x = np.linspace(0,5,5,False)
>>> x
array([0., 1., 2., 3., 4.])
>>> y = np.linspace(0,3,3,False)
>>> y
array([0., 1., 2.])

# メッシュグリッドの作成
>>> xx, yy = np.meshgrid(x,y)

>>> xx
array([[0., 1., 2., 3., 4.],
       [0., 1., 2., 3., 4.],
       [0., 1., 2., 3., 4.]])
>>> yy
array([[0., 0., 0., 0., 0.],
       [1., 1., 1., 1., 1.],
       [2., 2., 2., 2., 2.]])

はい、できました。

広告

Pythonの数値計算カテゴリの投稿