numpy.meshgrid

原文:https://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html

译者:飞龙 UsyiyiCN

校对:(虚位以待)

numpy.meshgrid(*xi, **kwargs)[source]

从坐标向量返回坐标矩阵。

给定一维坐标数组x1,x2,...,xn,使N-D坐标数组用于N-D标量/矢量场在N-D网格上的向量化评估。

在版本1.9中更改:允许1-D和0-D情况。

参数:

x1,x2,...,xn:array_like

表示网格的坐标的1-D数组。

索引:{'xy','ij'},可选

笛卡尔('xy',默认)或矩阵('ij')输出索引。有关详细信息,请参阅注释。

版本1.7.0中的新功能。

稀疏:bool,可选

如果为True,则返回稀疏网格以节省内存。默认值为False。

版本1.7.0中的新功能。

copy:bool,可选

如果为False,将返回原始数组的视图,以节省内存。默认值为True。请注意,sparse = False, copy = False可能会返回非连续数组。此外,广播数组的多于一个元件可以指代单个存储器位置。如果你需要写入数组,首先复制。

版本1.7.0中的新功能。

返回:

X1,X2,...,XN:ndarray

For vectors x1, x2,..., ‘xn’ with lengths Ni=len(xi) , return (N1, N2, N3,...Nn) shaped arrays if indexing=’ij’ or (N2, N1, N3,...Nn) shaped arrays if indexing=’xy’ with the elements of xi repeated to fill the matrix along the first dimension for x1, the second for x2 and so on.

也可以看看

index_tricks.mgrid
使用索引符号构造多维“网格网格”。
index_tricks.ogrid
使用索引符号构造一个开放的多维“网格网格”。

笔记

此函数通过indexing关键字参数支持两种索引约定。给字符串'ij'返回一个带有矩阵索引的meshgrid,而'xy'返回一个带有笛卡尔索引的meshgrid。在具有长度M和N的输入的2-D情况下,对于'xy'索引,输出具有形状(N,M),而对于'ij'索引,输出具有(M,N)。在具有长度M,N和P的输入的3-D情况下,对于'xy'索引,输出具有形状(N,M,P),而对于'ij'索引,输出具有(M,N,P)。差异由以下代码段说明:

xv, yv = meshgrid(x, y, sparse=False, indexing='ij')
for i in range(nx):
    for j in range(ny):
        # treat xv[i,j], yv[i,j]

xv, yv = meshgrid(x, y, sparse=False, 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 = meshgrid(x, y)
>>> xv
array([[ 0. ,  0.5,  1. ],
       [ 0. ,  0.5,  1. ]])
>>> yv
array([[ 0.,  0.,  0.],
       [ 1.,  1.,  1.]])
>>> xv, yv = meshgrid(x, y, sparse=True)  # make sparse output arrays
>>> xv
array([[ 0. ,  0.5,  1. ]])
>>> yv
array([[ 0.],
       [ 1.]])

meshgrid对于评估网格上的函数非常有用。

>>> x = np.arange(-5, 5, 0.1)
>>> y = np.arange(-5, 5, 0.1)
>>> xx, yy = meshgrid(x, y, sparse=True)
>>> z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
>>> h = plt.contourf(x,y,z)