语法
numpy.meshgrid(*xi, copy=True, sparse=False, indexing=’xy’)
功能
当传入的参数是两个的时候,meshgrid 函数就是用两个坐标轴上的点在平面上画网格。当然我们可以指定多个参数,比如三个参数,那么就是用用三个一维的坐标轴上的点在三维平面上画网格。
参数
x1, x2,…, xn: array_like
一维数组,表示网格的坐标。这里可以传入多个一维数组的值。但是这里需要注意的就是如果我们给传入的是一个矩阵(多维数组)的话,他会自动把这个矩阵转换成一维数组。
indexing: {‘xy’, ‘ij’}, optional
输出的形状基于笛卡尔(‘ xy ‘,默认)或矩阵(‘ ij ‘)索引。详情请看下面的“注意”。
sparse: bool, optional
如果为 True,则返回一个稀疏网格以节省内存。 默认值为 False。
copy: bool, optional
如果为 False,则返回原始数组的视图以节省内存。默认是正确的。请注意,sparse=False, copy=False 可能会返回不连续的数组。此外,广播数组的多个元素可以引用单个内存位置。如果需要写入数组,请先复制。
返回
X1, X2,…, XN: ndarray
对于长度为 Ni=len(xi)的向量 x1, x2,…,’ xn ‘,如果 index = ‘ ij ‘则返回(N1, N2, N3,…Nn)形状的数组,如果 index = ‘ xy ‘则返回(N2, N1, N3,…Nn)形状的数组,用对应 xi 的元素重复填充矩阵的第一个维度 x1,第二个维度 x2,以此类推。
注意
该函数通过 indexing 关键字参数支持这两种索引约定。给定字符串’ ij ‘将返回一个带有矩阵索引的网格,而’ xy ‘将返回一个带有笛卡尔索引的网格。在输入长度为 M 和 N 的二维情况下,输出为 xy 索引的形状(N, M)和 ij 索引的形状(M, N)。在输入长度为 M, N 和 P 的 3-D 情况下,输出为 xy 索引的形状(N, M, P)和 ij 索引的形状(M, N, P)。在 1 维和 0 维情况下,索引和稀疏两个参数的设置则没有影响。
用法
- xv,yv = meshgrid(x,y)
- xv,yv = meshgrid(x)与 xv,yv = meshgrid(x,x)是等同的
- xv,yv,zv = meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图
例 1 indexing 参数
indexing 参数有两个值’xy’和’ij’,默认值为’xy’。其中’xy’代表的是笛卡尔,’ij’代表的是矩阵。通过下面代码查看两者的区别:
1 | import numpy as np |
1 | -----向量的形状----- |
总结一下,对于二维数组来说,对于两个长度为 3 和 4 的一维数组,我们设 N = 3 ,M = 4。对于我们 indexing = ‘xy’(默认)来说,得到 xv 以及 yv 矩阵的形状是(M,N)也就是(4,3);那对于 indexing = ‘ij’我们的 xv 以及 yv 矩阵的形状是(N,M)也就是(3,4)。
那对于三维来说,参数是三个一维数组,并且一维数组的形状分别是 N,M,P,那么如果 indexing = ‘xy’的话返回的三个矩阵 xv,yv,zv 的形状都是(M,N,P);如果 indexing = ‘ij’的话返回的是三个矩阵 xv,yv,zv 的形状都是(N,M,P)。
另外,其实不管用’xy’还是’ij’, 生成的网格坐标都是同样的
例 2 np.meshgrid()+plt.contourf
np.meshgrid()生成网格坐标之后,可以配合 plt.contourf()生成填充的等高线图.
1 | nx, ny = (3, 2) |
1 | import matplotlib.pyplot as plt |
- 本文作者: YuT
- 本文链接: https://ytno1.github.io/archives/e3ef8953.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!