numpy.meshgrid#
- numpy.meshgrid(*xi, copy=True, sparse=False, indexing='xy')[源代码]#
从坐标向量返回坐标矩阵的元组.
创建 N-D 坐标数组,用于在一维坐标数组 x1, x2, …, xn 上对 N-D 标量/矢量场进行矢量化评估.
在 1.9 版本发生变更: 允许1-D和0-D情况.
- 参数:
- x1, x2,…, xnarray_like
表示网格坐标的1-D数组.
- indexing{‘xy’, ‘ij’}, 可选
输出可以是笛卡尔 (‘xy’, 默认) 或矩阵 (‘ij’) 索引.更多细节请参见注释.
在 1.7.0 版本加入.
- sparsebool, 可选
如果为真,则返回的第 i 维坐标数组的形状从
(N1, ..., Ni, ... Nn)
减少到(1, ..., 1, Ni, 1, ..., 1)
.这些稀疏坐标网格旨在与 广播 一起使用.当所有坐标在表达式中使用时,广播仍然会导致一个完全维度的结果数组.默认是 False.
在 1.7.0 版本加入.
- copybool, 可选
如果为 False,则返回原始数组的视图以节省内存.默认值为 True.请注意,``sparse=False, copy=False`` 可能会返回非连续数组.此外,广播数组的多个元素可能引用同一内存位置.如果需要写入数组,请先进行复制.
在 1.7.0 版本加入.
- 返回:
- X1, X2,…, XNndarrays 的元组
对于向量 x1, x2,…, xn 且长度为
Ni=len(xi)
,如果 indexing=’ij’ 则返回形状为(N1, N2, N3,..., Nn)
的数组,如果 indexing=’xy’ 则返回形状为(N2, N1, N3,..., Nn)
的数组,其中 xi 的元素被重复以填充矩阵,沿第一个维度填充 x1,第二个维度填充 x2,依此类推.
备注
此函数通过 indexing 关键字参数支持两种索引约定.提供字符串 ‘ij’ 返回一个使用矩阵索引的网格,而 ‘xy’ 返回一个使用笛卡尔索引的网格.在 2-D 情况下,输入长度为 M 和 N 时,输出形状为 (N, M) 用于 ‘xy’ 索引,(M, N) 用于 ‘ij’ 索引.在 3-D 情况下,输入长度为 M、N 和 P 时,输出形状为 (N, M, P) 用于 ‘xy’ 索引,(M, N, P) 用于 ‘ij’ 索引.差异通过以下代码片段说明:
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情况下,索引和稀疏关键字没有效果.
示例
>>> 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()