mars.tensor.meshgrid#
- mars.tensor.meshgrid(*xi, **kwargs)[来源]#
从坐标向量返回坐标矩阵。
创建 N-D 坐标数组,以便对 N-D 网格上的 N-D 标量/矢量场进行向量化评估,给定一维坐标张量 x1, x2,…, xn。
- Parameters
x1 (array_like) – 表示网格坐标的一维数组。
x2 (array_like) – 表示网格坐标的一维数组。
... (array_like) – 代表网格坐标的一维数组。
xn (array_like) – 表示网格坐标的一维数组。
索引 ({'xy', 'ij'}, 可选) – 输出的笛卡尔(‘xy’,默认为)或矩阵(‘ij’)索引。有关更多详细信息,请参见说明。
稀疏 (布尔值, 可选) – 如果为 True,则返回一个稀疏网格以节省内存。 默认值为 False。
- Returns
X1, X2,…, XN – 对于长度为
Ni=len(xi)的向量 x1, x2,…, ‘xn’,如果 indexing=’ij’ 则返回(N1, N2, N3,...Nn)形状的张量,或者如果 indexing=’xy’ 则返回(N2, N1, N3,...Nn)形状的张量,元素 xi 沿第一个维度为 x1 重复,第二个维度为 x2,依此类推。- Return type
张量
备注
该函数通过索引关键字参数支持两种索引约定。提供字符串 ‘ij’ 返回具有矩阵索引的网格,而 ‘xy’ 返回具有笛卡尔索引的网格。在输入长度为 M 和 N 的二维情况下,对于 ‘xy’ 索引,输出形状为 (N, M),而对于 ‘ij’ 索引,输出形状为 (M, N)。在输入长度为 M、N 和 P 的三维情况下,对于 ‘xy’ 索引,输出形状为 (N, M, P),而对于 ‘ij’ 索引,输出形状为 (M, N, P)。以下代码片段说明了两者之间的区别:
xv, yv = mt.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 = mt.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的情况下,索引和稀疏关键字没有影响。
示例
>>> import mars.tensor as mt
>>> nx, ny = (3, 2) >>> x = mt.linspace(0, 1, nx) >>> y = mt.linspace(0, 1, ny) >>> xv, yv = mt.meshgrid(x, y) >>> xv.execute() array([[ 0. , 0.5, 1. ], [ 0. , 0.5, 1. ]]) >>> yv.execute() array([[ 0., 0., 0.], [ 1., 1., 1.]]) >>> xv, yv = mt.meshgrid(x, y, sparse=True) # make sparse output arrays >>> xv.execute() array([[ 0. , 0.5, 1. ]]) >>> yv.execute() array([[ 0.], [ 1.]])
meshgrid 在网格上评估函数时非常有用。
>>> import matplotlib.pyplot as plt >>> x = mt.arange(-5, 5, 0.1) >>> y = mt.arange(-5, 5, 0.1) >>> xx, yy = mt.meshgrid(x, y, sparse=True) >>> z = mt.sin(xx**2 + yy**2) / (xx**2 + yy**2) >>> h = plt.contourf(x,y,z)