python 的 numpy.meshgrid 方法
numpy 中的 meshgrid() 函数能够生成坐标网格点,作为后续操作的输入,如画二元函数等高线图等。但它的理解却有些困难,本篇以 Jupyterlab 为平台演示,帮助理解该函数。
直观理解
请看下图,矩阵 (1) 为输入,其中[1, 2, 3] 为 $x$ 轴坐标,[6, 5, 4] 为 $y$ 轴坐标,里面的点 $\cdot$ 为有待求得的网格点。矩阵 (2) 为网格点矩阵,每个元素为该坐标处的 $(x, y)$ 坐标。两个矩阵 ($xv$), ($yv$) 分别为 np.meshgrid() 函数返回的 $x$ 坐标点矩阵和 $y$ 坐标点矩阵。
$$
\begin{matrix}
6 & . & . & . \\
5 & . & . & . \\
4 & . & . & . \\
& 1 & 2 & 3
\end{matrix} \tag{1}
$$
$$
\left[
\begin{matrix}
(1, 6) & (2, 6) & (3, 6) \\
(1, 5) & (2, 5) & (3, 5) \\
(1, 4) & (2, 4) & (3, 4)
\end{matrix}
\right]\tag{2}
$$
$$
\left[
\begin{matrix}
1 & 2 & 3 \\
1 & 2 & 3 \\
1 & 2 & 3
\end{matrix}
\right]\tag{xv}
$$
$$
\left[
\begin{matrix}
6 & 6 & 6 \\
5 & 5 & 5 \\
4 & 4 & 4
\end{matrix}
\right]\tag{yv}
$$
1 | import numpy as np |
1 | x = np.array([1, 2, 3]) |
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
1 | yv |
array([[6, 6, 6],
[5, 5, 5],
[4, 4, 4]])
示例
1 | import matplotlib.pyplot as plt |
1 | def circ(x, y): |
1 | x = np.linspace(-np.pi, np.pi, 20) |
画网格点
1 | plt.plot(xv, yv, marker=".", color="r", linestyle="none") |
画等高线
1 | plt.contourf(x, y, z) |
画近似等高线图
1 | plt.imshow(z, origin="lower", interpolation="none") |