numpy.meshgrid#
- numpy.meshgrid(※xi, copy=True, sparse=False, indexing='xy')[源代码]#
从坐标向量返回坐标矩阵的元组。
给定一维坐标向量 x1, x2,…, xn,创建 N 维坐标数组,用于在 N 维网格上进行 N 维标量/向量场的向量化求值。
- 参数:
- x1, x2,…, xnarray_like
表示网格坐标的一维数组。
- indexing{‘xy’, ‘ij’}, optional
输出的笛卡尔(‘xy’,默认)或矩阵(‘ij’)索引。更多详情请参阅 Notes。
- sparsebool, optional
如果为 True,则维度 i 的返回坐标数组的形状将从
(N1, ..., Ni, ... Nn)减小到(1, ..., 1, Ni, 1, ..., 1)。这些稀疏坐标网格旨在与 广播 一起使用。当所有坐标都用于表达式时,广播仍会产生一个全维度的结果数组。默认为 False。
- copybool, optional
如果为 False,则返回原始数组的视图,以节省内存。默认为 True。请注意,
sparse=False, copy=False可能会返回非连续数组。此外,广播数组的一个以上元素可能指向同一个内存位置。如果您需要写入数组,请先进行复制。
- 返回:
- X1, X2,…, XNtuple of ndarrays
对于长度为
Ni=len(xi)的向量 x1, x2,…, xn,如果 indexing=’ij’,则返回形状为(N1, N2, N3,..., Nn)的数组;如果 indexing=’xy’,则返回形状为(N2, N1, N3,..., Nn)的数组,其中 xi 的元素被重复以填满第一个维度上的矩阵(对于 x1),第二个维度(对于 x2)依此类推。
另请参阅
mgrid使用索引表示法构建多维“网格”。
ogrid使用索引表示法构建开放的多维“网格”。
- 如何索引 ndarrays
备注
此函数通过 indexing 关键字参数支持两种索引约定。给出字符串 ‘ij’ 返回具有矩阵索引的网格,而 ‘xy’ 返回具有笛卡尔索引的网格。在长度分别为 M 和 N 的 2D 情况中,对于 ‘xy’ 索引,输出形状为 (N, M);对于 ‘ij’ 索引,输出形状为 (M, N)。在长度分别为 M、N 和 P 的 3D 情况中,对于 ‘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]
在 1D 和 0D 情况中,indexing 和 sparse 关键字无效。
示例
>>> import numpy as np >>> 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()