. Ridの使い方 (メッシュグリッド) | 機械学習と情報技術
Ridの使い方 (メッシュグリッド) | 機械学習と情報技術
Ridの使い方 (メッシュグリッド) | 機械学習と情報技術

世界一分かりやすいnp.meshgridの使い方 (メッシュグリッド)

meshgridを利用すると、このようなコードで格子点のリストを作ることができます。 ここで、X, Yはそれぞれ次のようになっています。 自分の経験上ですが、6×4 = 24 点の格子点を作ったので、サイズが24のリストが返ってくるかと思いきや、X, Y と変数が2つに増えてるので、よくわからん…となってしまいます。 このmeshgrid()の返り値で返ってくる、X, Y とは何者なのか、ここからみていきましょう。

meshgridの返り値

先ほど、meshgridは2つの変数が返り値として返ってくるといいましたが、この2つの返り値の中身はこのようになっています。 まず最初の返り値は、meshgridで構築した格子点のX座標の集合、2番目の返り値は、Y座標の集合となっています。それぞれの中身はこのようになっています。 ビジュアライズすると分かりやすいですが、X, Yがそれぞれ作った格子点のx, y座標の値に対応していることがわかります。今回作った格子が、6×4のサイズであるため、X, Yも6×4のサイズになっています。

格子上の値を扱うには、別の変数が別途必要

meshgridでできるのは、格子点のリストだけなので、その格子状の値を扱うには、別の変数が必要になります。この値を入れる変数も、格子の点に対応した6×4のサイズの配列が必要になるわけです。

meshgridを利用して、2次元ガウス分布を描く

今回は例題として、meshgridを利用して、多次元(2次元)ガウス分布を、三次元空間で可視化します。 コードは下記のようになっています、。 matplotlibのplot_surface関数の引数に注目すると、meshgridで作成したx座標のリストX、y座標のリストY、そして、値の入ったリストZを引数に渡しているのがわかります。

# https://scipython.com/blog/visualizing-the-bivariate-gaussian-distribution/ import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D from scipy.stats import multivariate_normal N = 60 X = np.linspace(-3, 3, N) Y = np.linspace(-3, 4, N) X, Y = np.meshgrid(X, Y) mu = np.array([0., 1.]) Sigma = np.array([[ 1. , -0.5], [-0.5, 1.5]]) pos = np.empty(X.shape + (2,)) pos[:, :, 0] = X pos[:, :, 1] = Y F = multivariate_normal(mu, Sigma) Z = F.pdf(pos) fig = plt.figure() ax = fig.gca(projection='3d') ax.plot_surface(X, Y, Z, rstride=3, cstride=3, linewidth=1, antialiased=True, cmap=cm.viridis) plt.show()
📎📎📎📎📎📎📎📎📎📎