理解numpy中的meshgrid()方法

python的meshgrid()方法在很多地方都有应用,例如生成等高线图的数据集。那meshgrid()方法的目的是什么呢?

借用一张图,

可以看到,meshgrid()方法接受两个一维向量,生成一个坐标矩阵。

1
2
3
4
5
6
7
8
9
10
import numpy as np
import matplotlib.pyplot as plt

xvalues = np.array([1, 2, 3, 4])
yvalues = np.array([7, 6, 5])

xx, yy = np.meshgrid(xvalues, yvalues)

print('xx=', xx)
print('yy=', yy)

输出

xx= [[1 2 3 4]
     [1 2 3 4]
     [1 2 3 4]]
yy= [[7 7 7 7]
     [6 6 6 6]
     [5 5 5 5]]

将生成的两个坐标矩阵通过matplot库的plot()方法画出来:

1
2
plt.plot(xx, yy, marker='.', color='k', linestyle='none')
plt.show()

可以看到,通过meshgrid()方法,可以很简单的生成坐标矩阵。而坐标矩阵在图像绘制中有很多应用,例如我们画网格图:

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
import matplotlib.pyplot as plt

def sinus2d(x, y):
return np.sin(x) + np.sin(y)

xx, yy = np.meshgrid(np.linspace(0, 2 * np.pi, 10), np.linspace(0, 2 * np.pi, 10))
z = sinus2d(xx, yy) # Create the image on this grid

plt.imshow(z, origin='lower', interpolation='none')
plt.show()

1
2
# 增加坐标矩阵的密集程度
xx, yy = np.meshgrid(np.linspace(0, 2 * np.pi, 100), np.linspace(0, 2 * np.pi, 100))