一句話解釋numpy.meshgrid()
——生成網格點座標矩陣。
關鍵詞:網格點,座標矩陣
網格點是什麼?座標矩陣又是什麼?
看個圖就明白了:
圖中,每個交叉點都是網格點,描述這些網格點的座標的矩陣,就是座標矩陣。
再看個簡單例子
A,B,C,D,E,F是6個網格點,座標如圖,如何用矩陣形式(座標矩陣)來批量描述這些點的座標呢?
答案如下:
這就是座標矩陣——橫座標矩陣中的每個元素,與縱座標矩陣中對應位置元素,共同構成一個點的完整座標。如B點座標(,)=(1,1)(X_{12},Y_{12})=(1,1)
下面可以自己用matplotlib來試一試,輸出就是上邊的圖.
import numpy as np
import matplotlib.pyplot as plt
x = np.array([[0, 1, 2], [0, 1, 2]])
y = np.array([[0, 0, 0], [1, 1, 1]])
plt.plot(x, y,color='red', marker='.', linestyle='') # 線型爲空,也即點與點之間不用線連接
plt.grid(True)
plt.show()
再舉個例子
import numpy as np
import matplotlib.pyplot as plt
x = np.array([[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3]])
y = np.array([[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3]])
plt.plot(x, y,
marker='.', # 點的形狀爲圓點
markersize=10, # 點設置大一點,看着清楚
linestyle='-.') # 線型爲點劃線
plt.grid(True)
plt.show()
到這裏,網格點和座標矩陣的概念就解釋清楚了。
那麼問題來了,如果需要的圖比較大,需要大量的網格點該怎麼辦呢?比如下面的這種
最直接但是最笨的方法,就是按照上面的方法把橫縱座標矩陣,寫出來,然後再繪圖。
很明顯,對於網格點很多的情況根本沒法用。有啥好的辦法嗎?
有的,注意到我們之前練習的座標矩陣,其實有大量的重複。的每一行都一樣,的每一列都一樣。基於這種強烈的規律性,numpy提供的numpy.meshgrid()
函數可以讓我們快速生成座標矩陣,。
語法:X,Y = numpy.meshgrid(x, y)
輸入的x,y,就是網格點的橫縱座標列向量(非矩陣)
輸出的X,Y,就是座標矩陣。
我們來試驗一下:改寫第一個例子中的代碼,用numpy.meshgrid
來實現。
import numpy as np
import matplotlib.pyplot as plt
x = np.array([0, 1, 2])
y = np.array([0, 1])
X, Y = np.meshgrid(x, y)
print(X)
print(Y)
plt.plot(X, Y,
color='red', # 全部點設置爲紅色
marker='.', # 點的形狀爲圓點
linestyle='') # 線型爲空,也即點與點之間不用線連接
plt.grid(True)
plt.show()
[[0 1 2]
[0 1 2]]
[[0 0 0]
[1 1 1]]
從輸出的結果來看,兩種方法生成的座標矩陣一模一樣。