numpy.meshgrid #
- 麻木的。meshgrid ( * xi ,复制= True ,稀疏= False ,索引= 'xy' ) [来源] #
从坐标向量返回坐标矩阵的列表。
给定一维坐标数组 x1, x2,…, xn,创建 ND 坐标数组,用于 ND 网格上 ND 标量/矢量场的矢量化评估。
版本 1.9 中进行了更改:允许 1-D 和 0-D 情况。
- 参数:
- x1, x2,…, xn类似数组
表示网格坐标的一维数组。
- 索引{'xy', 'ij'},可选
输出的笛卡尔('xy',默认)或矩阵('ij')索引。有关更多详细信息,请参阅注释。
1.7.0 版本中的新增内容。
- 稀疏布尔值,可选
如果为 True,则返回的维度i的坐标数组的形状 从 减少到 。这些稀疏坐标网格旨在与广播一起使用。当表达式中使用所有坐标时,广播仍然会产生全维结果数组。
(N1, ..., Ni, ... Nn)
(1, ..., 1, Ni, 1, ..., 1)
默认值为 False。
1.7.0 版本中的新增内容。
- 复制布尔值,可选
如果为 False,则返回原始数组的视图以节省内存。默认为 True。请注意, 可能会返回不连续的数组。此外,广播数组的多个元素可以引用单个存储位置。如果需要写入数组,请先制作副本。
sparse=False, copy=False
1.7.0 版本中的新增内容。
- 返回:
- X1, X2,…, XN ndarray 列表
对于长度为 x1 、x2、…、xn 的向量x1 、 x2 、…、xn ,如果索引='ij',则返回成形数组;如果索引='xy',则返回成形数组,其中重复xi的元素以沿x1的第一个维度填充矩阵,第二个维度为x2等等。
Ni=len(xi)
(N1, N2, N3,..., Nn)
(N2, N1, N3,..., Nn)
笔记
该函数通过索引关键字参数支持两种索引约定。给出字符串“ij”返回带有矩阵索引的网格网格,而“xy”返回带有笛卡尔索引的网格网格。在输入长度为 M 和 N 的二维情况下,“xy”索引的输出形状为 (N, M),“ij”索引的输出形状为 (M, N)。在输入长度为 M、N 和 P 的 3-D 情况下,“xy”索引的输出形状为 (N, M, P),“ij”索引的输出形状为 (M, N, P)。下面的代码片段说明了其中的差异:
xv, yv = np.meshgrid(x, y, indexing='ij') for i in range(nx): for j in range(ny): # treat xv[i,j], yv[i,j] xv, yv = np.meshgrid(x, y, indexing='xy') for i in range(nx): for j in range(ny): # treat xv[j,i], yv[j,i]
在 1-D 和 0-D 情况下,索引和稀疏关键字没有效果。
例子
>>> nx, ny = (3, 2) >>> x = np.linspace(0, 1, nx) >>> y = np.linspace(0, 1, ny) >>> xv, yv = np.meshgrid(x, y) >>> xv array([[0. , 0.5, 1. ], [0. , 0.5, 1. ]]) >>> yv array([[0., 0., 0.], [1., 1., 1.]])
结果
meshgrid
是坐标网格:>>> import matplotlib.pyplot as plt >>> plt.plot(xv, yv, marker='o', color='k', linestyle='none') >>> plt.show()
您可以创建稀疏输出数组以节省内存和计算时间。
>>> xv, yv = np.meshgrid(x, y, sparse=True) >>> xv array([[0. , 0.5, 1. ]]) >>> yv array([[0.], [1.]])
meshgrid
对于评估网格上的函数非常有用。如果函数依赖于所有坐标,则可以使用密集和稀疏输出。>>> x = np.linspace(-5, 5, 101) >>> y = np.linspace(-5, 5, 101) >>> # full coordinate arrays >>> xx, yy = np.meshgrid(x, y) >>> zz = np.sqrt(xx**2 + yy**2) >>> xx.shape, yy.shape, zz.shape ((101, 101), (101, 101), (101, 101)) >>> # sparse coordinate arrays >>> xs, ys = np.meshgrid(x, y, sparse=True) >>> zs = np.sqrt(xs**2 + ys**2) >>> xs.shape, ys.shape, zs.shape ((1, 101), (101, 1), (101, 101)) >>> np.array_equal(zz, zs) True
>>> h = plt.contourf(x, y, zs) >>> plt.axis('scaled') >>> plt.colorbar() >>> plt.show()