numpy.meshgrid>関数は、デカルト インデックスまたは行列インデックスを表す 2 つの指定された 1 次元配列から長方形グリッドを作成するために使用されます。 Meshgrid 関数は、MATLAB から多少インスピレーションを受けています。 X 軸が -4 ~ 4 の範囲、Y 軸が -5 ~ 5 の範囲である以下の図を考えてみましょう。つまり、図には合計 (9 * 11) = 99 個の点がマークされ、それぞれが X 座標とY 座標。 X 軸に平行な任意の線の場合、マークされた点の X 座標はそれぞれ -4、-3、-2、-1、0、1、2、3、4 になります。 Y 軸に平行な場合、マークされた点の Y 座標は下から上に -5、-4、-3、-2、-1、0、1、2、3、4、5 になります。numpy.meshgrid>関数は、すべての点の X 座標と Y 座標を表す 2 つの 2 次元配列を返します。
例: 入力: x = [-4、-3、-2、-1、0、1、2、3、4] y = [-5、-4、-3、-2、-1、0、1、2、3 、5つ] 出力: x_1 = 配列([[-4., -3., -2., -1., 0., 1., 2., 3., 4.], [-4., -3., -2. 、-1.、0.、1.、2.、3.、4.]、[-4.、-3.、-2.、-1.、0.、1.、2.、3.、 4.]、[-4.、-3.、-2.、-1.、0.、1.、2.、3.、4.]、[-4.、-3.、-2.、 -1.、0.、1.、2.、3.、4.]、[-4.、-3.、-2.、-1.、0.、1.、2.、3.、4 .]、[-4.、-3.、-2.、-1.、0.、1.、2.、3.、4.]、[-4.、-3.、-2.、- 1.、0.、1.、2.、3.、4.]、[-4.、-3.、-2.、-1.、0.、1.、2.、3.、4. ]、[-4.、-3.、-2.、-1.、0.、1.、2.、3.、4.]、[-4.、-3.、-2.、-1 ., 0., 1., 2., 3., 4.]]) y_1 = array([[-5., -5., -5., -5., -5., -5., - 5.、-5.、-5.]、[-4.、-4.、-4.、-4.、-4.、-4.、-4.、-4.、-4.]、 [-3.、-3.、-3.、-3.、-3.、-3.、-3.、-3.、-3.]、[-2.、-2.、-2. 、-2.、-2.、-2.、-2.、-2.、-2.]、[-1.、-1.、-1.、-1.、-1.、-1. 、-1.、-1.、-1.]、[ 0.、0.、0.、0.、0.、0.、0.、0.、0.]、[ 1.、1.、 1.、1.、1.、1.、1.、1.、1.]、[2.、2.、2.、2.、2.、2.、2.、2.、2.] 、[ 3.、3.、3.、3.、3.、3.、3.、3.、3.]、[ 4.、4.、4.、4.、4.、4.、4 .、4.、4.]、[ 5.、5.、5.、5.、5.、5.、5.、5.、5.]]) 入力: x = [0、1、2、3、4、5] y = [2、3、4、5、6、7、8] 出力: x_1 = 配列([[0., 1., 2., 3., 4., 5.], [0., 1., 2., 3., 4., 5.], [0., 1 .、2.、3.、4.、5.]、[0.、1.、2.、3.、4.、5.]、[0.、1.、2.、3.、4. , 5.], [0., 1., 2., 3., 4., 5.], [0., 1., 2., 3., 4., 5.]]) y_1 = array( [[2.、2.、2.、2.、2.、2.]、[3.、3.、3.、3.、3.、3.]、[4.、4.、4. 、4.、4.、4.]、[5.、5.、5.、5.、5.、5.]、[6.、6.、6.、6.、6.、6.] 、[7.、7.、7.、7.、7.、7.]、[8.、8.、8.、8.、8.、8.]]
以下はコードです: # Sample code for generation of first example> import> numpy as np> # from matplotlib import pyplot as plt> # pyplot imported for plotting graphs> > x>=> np.linspace(>->4>,>4>,>9>)> > # numpy.linspace creates an array of> # 9 linearly placed elements between> # -4 and 4, both inclusive> y>=> np.linspace(>->5>,>5>,>11>)> > # The meshgrid function returns> # two 2-dimensional arrays> x_1, y_1>=> np.meshgrid(x, y)> > print>(>'x_1 = '>)> print>(x_1)> print>(>'y_1 = '>)> print>(y_1)> |
Output: x_1 = [[-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.] [-4. -3. -2. -1. 0. 1. 2. 3. 4.]] y_1 = [[-5. -5. -5. -5. -5. -5. -5. -5. -5.] [-4. -4. -4. -4. -4. -4. -4. -4. -4.] [-3. -3. -3. -3. -3. -3. -3. -3. -3.] [-2. -2. -2. -2. -2. -2. -2. -2. -2.] [-1. -1. -1. -1. -1. -1. -1. -1. -1.] [ 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 1. 1. 1. 1. 1. 1. 1. 1. 1.] [ 2. 2. 2. 2. 2. 2. 2. 2. 2.] [ 3. 3. 3. 3. 3. 3. 3. 3. 3.] [ 4. 4. 4. 4. 4. 4. 4. 4. 4.] [ 5. 5. 5. 5. 5. 5. 5. 5. 5.]] The output of coordinates by meshgrid can also be used for plotting functions within the given coordinate range. An Ellipse: ellipse = xx * 2 + 4 * yy**2 plt.contourf(x_1, y_1, ellipse, cmap = 'jet') plt.colorbar() plt.show() Output: Random Data: random_data = np.random.random((11, 9)) plt.contourf(x_1, y_1, random_data, cmap = 'jet') plt.colorbar() plt.show() Output: A Sine function: sine = (np.sin(x_1**2 + y_1**2))/(x_1**2 + y_1**2) plt.contourf(x_1, y_1, sine, cmap = 'jet') plt.colorbar() plt.show() Output: We observe that x_1 is a row repeated matrix whereas y_1 is a column repeated matrix. One row of x_1 and one column of y_1 is enough to determine the positions of all the points as the other values will get repeated over and over. So we can edit above code as follows: x_1, y_1 = np.meshgrid(x, y, sparse = True) This will produce the following output: x_1 = [[-4. -3. -2. -1. 0. 1. 2. 3. 4.]] y_1 = [[-5.] [-4.] [-3.] [-2.] [-1.] [ 0.] [ 1.] [ 2.] [ 3.] [ 4.] [ 5.]] The shape of x_1 changed from (11, 9) to (1, 9) and that of y_1 changed from (11, 9) to (11, 1) The indexing of Matrix is however different. Actually, it is the exact opposite of Cartesian indexing. For the matrix shown above, for a given row Y-coordinate increases as 0, 1, 2, 3 from left to right whereas for a given column X-coordinate increases from top to bottom as 0, 1, 2. The two 2-dimensional arrays returned from Matrix indexing will be the transpose of the arrays generated by the previous program. The following code can be used for obtaining Matrix indexing: # Sample code for generation of Matrix indexing import numpy as np x = np.linspace(-4, 4, 9) # numpy.linspace creates an array # of 9 linearly placed elements between # -4 and 4, both inclusive y = np.linspace(-5, 5, 11) # The meshgrid function returns # two 2-dimensional arrays x_1, y_1 = np.meshgrid(x, y) x_2, y_2 = np.meshgrid(x, y, indexing = 'ij') # The following 2 lines check if x_2 and y_2 are the # transposes of x_1 and y_1 respectively print('x_2 = ') print(x_2) print('y_2 = ') print(y_2) # np.all is Boolean and operator; # returns true if all holds true. print(np.all(x_2 == x_1.T)) print(np.all(y_2 == y_1.T)) Output: x_2 = [[-4. -4. -4. -4. -4. -4. -4. -4. -4. -4. -4.] [-3. -3. -3. -3. -3. -3. -3. -3. -3. -3. -3.] [-2. -2. -2. -2. -2. -2. -2. -2. -2. -2. -2.] [-1. -1. -1. -1. -1. -1. -1. -1. -1. -1. -1.] [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] [ 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2.] [ 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] [ 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4.]] y_2 = [[-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.] [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.] [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.] [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.] [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.] [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.] [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.] [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.] [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.]] True True The sparse = True can also be added in the meshgrid function of Matrix indexing. In this case, the shape of x_2 will change from (9, 11) to (9, 1) and that of y_2 will change from (9, 11) to (1, 11).>