dask.array.meshgrid

dask.array.meshgrid

dask.array.meshgrid(*xi, sparse=False, indexing='xy', **kwargs)[源代码]

从坐标向量返回坐标矩阵的元组。

此文档字符串是从 numpy.meshgrid 复制的。

Dask 版本可能存在一些不一致性。

为 N 维标量/向量场在 N 维网格上进行向量化评估,生成 N 维坐标数组,给定一维坐标数组 x1, x2, …, xn。

在 1.9 版更改: 允许1-D和0-D的情况。

参数
x1, x2,…, xnarray_like

表示网格坐标的1-D数组。

索引{‘xy’, ‘ij’}, 可选

输出结果的索引方式可以是笛卡尔坐标系(’xy’,默认)或矩阵(’ij’)索引。更多详情请参见注释。

1.7.0 新版功能.

稀疏bool, 可选

如果为真,则返回的维度 i 的坐标数组的形状从 (N1, ..., Ni, ... Nn) 减少到 (1, ..., 1, Ni, 1, ..., 1)。这些稀疏坐标网格旨在与 Broadcasting 一起使用。当所有坐标在表达式中使用时,广播仍然会导致一个完全多维的结果数组。

默认是 False。

1.7.0 新版功能.

复制bool, 可选 (Dask 不支持)

如果为 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 沿第二个维度,依此类推。

参见

mgrid

使用索引表示法构建多维“网格”。

ogrid

使用索引表示法构造一个开放的多维“网格”。

如何索引

注释

此函数通过 indexing 关键字参数支持两种索引约定。传递字符串 ‘ij’ 返回使用矩阵索引的网格,而 ‘xy’ 返回使用笛卡尔索引的网格。在输入长度为 M 和 N 的二维情况下,输出形状为 (N, M) 用于 ‘xy’ 索引,(M, N) 用于 ‘ij’ 索引。在输入长度为 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]

在一维和零维情况下,索引和稀疏关键字没有效果。

示例

>>> 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()