简短的回答
meshgrid的目的是通过NumPy库中更快的向量化操作来帮助取代缓慢的Python循环。meshgrid角色是准备向量化操作所需的2D数组。
基本的例子说明了原理
假设我们有两个值序列,
a = [2,7,9,20]
b = [1,6,7,9]
我们想对每一对可能的值执行一个操作,一个从第一个列表中取出,一个从第二个列表中取出。我们还想存储结果。例如,假设我们想要得到每对可能的值的和。
缓慢而费力的方法
c = []
for i in range(len(b)):
row = []
for j in range(len(a)):
row.append (a[j] + b[i])
c.append (row)
print (c)
结果:
[[3, 8, 10, 21],
[8, 13, 15, 26],
[9, 14, 16, 27],
[11, 16, 18, 29]]
快速简便的方法
i,j = np.meshgrid (a,b)
c = i + j
print (c)
结果:
[[ 3 8 10 21]
[ 8 13 15 26]
[ 9 14 16 27]
[11 16 18 29]]
从这个基本示例中,您可以看到Numpy库中显式的慢Python循环是如何被隐藏的更快的C循环所取代的。这个原理被广泛应用于3D操作,包括彩色像素地图。常见的例子是3D图。
常用:3D绘图
x = np.arange(-4, 4, 0.25)
y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(x, y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
(引自本网站)
meshgrid用于创建在-4和+4之间的坐标对,在X和y的每个方向上增加.25,然后使用每对坐标对从中找到R和Z。这种准备坐标“网格”的方法经常用于绘制3D曲面,或为2D曲面着色。
引擎盖下的网格
meshgrid准备的两个数组是:
(array([[ 2, 7, 9, 20],
[ 2, 7, 9, 20],
[ 2, 7, 9, 20],
[ 2, 7, 9, 20]]),
array([[1, 1, 1, 1],
[6, 6, 6, 6],
[7, 7, 7, 7],
[9, 9, 9, 9]]))
这些数组是通过水平或垂直重复所提供的值来创建的。对于矢量操作,这两个数组是形状兼容的。
起源
numpy。像许多其他NumPy函数一样,meshgrid来自MATLAB。所以你也可以研究MATLAB中的例子,看看网格在使用中,三维绘图的代码在MATLAB中看起来是一样的。