442

meshgridNumpyの関数の目的を誰かに説明してもらえますか? プロット用にある種の座標グリッドを作成することは知っていますが、その直接的な利点は実際にはわかりません。

私は Sebastian Raschka から「Python Machine Learning」を学んでおり、彼はそれを決定境界のプロットに使用しています。ここで入力 11 を参照してください。

公式ドキュメントからこのコードも試してみましたが、出力はあまり意味がありません。

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)

可能であれば、実際の例もたくさん見せてください。

4

8 に答える 8

562

の目的はmeshgrid、x 値の配列と y 値の配列から長方形のグリッドを作成することです。

したがって、たとえば、x 方向と y 方向の両方で 0 から 4 までの各整数値にポイントがあるグリッドを作成したい場合。長方形のグリッドを作成するには、xyポイントのすべての組み合わせが必要です。

これで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実際にこれを生成できます。指定する必要があるのは、一意の値xy値だけです。

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)の値の範囲で関数 ( ) をサンプリングする方法にすぎません。xy

この関数は長方形のグリッドでサンプリングされているため、関数を「画像」として視覚化できます。

ここに画像の説明を入力

さらに、長方形グリッド上のデータを期待する関数に結果を渡すことができるようになりました (つまりcontourf)

于 2016-03-15T14:49:10.760 に答える
5

meshgrid は、2 つの配列からの点のすべてのペアの 2 つの 1 次元配列から四角形のグリッドを作成するのに役立ちます。

x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 2, 3, 4])

ここで、関数 f(x,y) を定義し、この関数を配列 'x' と 'y' のすべての可能な点の組み合わせに適用したい場合は、次のようにします。

f(*np.meshgrid(x, y))

たとえば、関数が 2 つの要素の積を生成するだけの場合、これが大規模な配列に対して効率的にデカルト積を達成する方法です。

ここから引用

于 2018-05-11T10:32:01.360 に答える