maxframe.tensor.meshgrid#

maxframe.tensor.meshgrid(*xi, **kwargs)[源代码]#

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

给定一维坐标张量 x1, x2,..., xn,为 N 维网格上的 N 维标量/向量场的向量化计算生成 N 维坐标数组。

参数:
  • x1 (array_like) -- 表示网格坐标的 1 维数组。

  • x2 (array_like) -- 表示网格坐标的 1 维数组。

  • ... (array_like) -- 表示网格坐标的 1 维数组。

  • xn (array_like) -- 表示网格坐标的 1 维数组。

  • indexing ({'xy', 'ij'}, optional) -- 输出的笛卡尔 ('xy',默认) 或矩阵 ('ij') 索引方式。详见说明部分。

  • sparse (bool, optional) -- 如果为 True,则返回稀疏网格以节省内存。默认为 False。

返回:

X1, X2,..., XN -- 对于长度为 Ni=len(xi) 的向量 x1, x2,..., 'xn',如果 indexing='ij' 则返回形状为 (N1, N2, N3,...Nn) 的张量;如果 indexing='xy' 则返回形状为 (N2, N1, N3,...Nn) 的张量,其中 xi 的元素沿第一个维度(对于 x1)、第二个维度(对于 x2)等重复填充矩阵。

返回类型:

Tensor

备注

该函数通过 indexing 关键字参数支持两种索引约定。指定字符串 '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]

在一维和零维情况下,indexing 和 sparse 关键字不起作用。

示例

>>> import maxframe.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)