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)

也可以看看

mgrid

使用索引符号构建多维“网格”。

ogrid

使用索引符号构建开放的多维“网格”。

how-to-index

笔记

该函数通过索引关键字参数支持两种索引约定。给出字符串“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()
../../_images/numpy-meshgrid-1_00_00.png

您可以创建稀疏输出数组以节省内存和计算时间。

>>> 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()
../../_images/numpy-meshgrid-1_01_00.png