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)