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.]])

はい、できました。

公開日

広告