の目的は何ですか?np.meshgrid
? プロット用に何らかの座標グリッドを作成することはわかっていますが、その直接的な利点はわかりません。
公式ドキュメントには次の例が記載されていますが、その出力は私には意味がわかりません。
x = np.arange(-5, 5, 1)
y = np.arange(-5, 5, 1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
h = plt.contourf(x,y,z)
ベストアンサー1
の目的は、meshgrid
x 値の配列と y 値の配列から長方形のグリッドを作成することです。
たとえば、x 方向と y 方向の両方で 0 から 4 までの各整数値に点があるグリッドを作成するとします。長方形のグリッドを作成するには、点x
とy
点のすべての組み合わせが必要です。
これは 25 個のポイントになりますね。したがって、これらすべてのポイントの x および y 配列を作成する場合は、次のようにします。
x[0,0] = 0 y[0,0] = 0
x[0,1] = 1 y[0,1] = 0
x[0,2] = 2 y[0,2] = 0
x[0,3] = 3 y[0,3] = 0
x[0,4] = 4 y[0,4] = 0
x[1,0] = 0 y[1,0] = 1
x[1,1] = 1 y[1,1] = 1
...
x[4,3] = 3 y[4,3] = 4
x[4,4] = 4 y[4,4] = 4
x
これにより、次の行列と行列が生成されy
、各行列の対応する要素を組み合わせると、グリッド内の点の x 座標と y 座標が得られます。
x = 0 1 2 3 4 y = 0 0 0 0 0
0 1 2 3 4 1 1 1 1 1
0 1 2 3 4 2 2 2 2 2
0 1 2 3 4 3 3 3 3 3
0 1 2 3 4 4 4 4 4 4
次に、これらをプロットして、グリッドであることを確認します。
plt.plot(x,y, marker='.', color='k', linestyle='none')
x
明らかに、これは、 との範囲が広い場合には特に非常に面倒ですy
。 代わりに、meshgrid
は実際にこれを生成できます。指定する必要があるのは、一意のx
と のy
値だけです。
xvalues = np.array([0, 1, 2, 3, 4]);
yvalues = np.array([0, 1, 2, 3, 4]);
ここで、 を呼び出すとmeshgrid
、以前の出力が自動的に取得されます。
xx, yy = np.meshgrid(xvalues, yvalues)
plt.plot(xx, yy, marker='.', color='k', linestyle='none')
これらの長方形グリッドの作成は、さまざまなタスクに役立ちます。投稿で提供された例では、これは単に、およびsin(x**2 + y**2) / (x**2 + y**2)
の値の範囲にわたって関数 ( ) をサンプリングする方法です。x
y
この関数は長方形のグリッド上でサンプリングされているため、関数を「画像」として視覚化できるようになりました。
さらに、結果は長方形グリッド上のデータを期待する関数に渡すことができるようになりました(つまりcontourf
)