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)