如何理解numpy.meshgrid()

一句話解釋numpy.meshgrid()——生成網格點座標矩陣
關鍵詞:網格點,座標矩陣

網格點是什麼?座標矩陣又是什麼?
看個圖就明白了:

圖中,每個交叉點都是網格點,描述這些網格點的座標的矩陣,就是座標矩陣。

再看個簡單例子

A,B,C,D,E,F是6個網格點,座標如圖,如何用矩陣形式(座標矩陣)來批量描述這些點的座標呢?
答案如下:
X=[012012]Y=[111000]\begin{aligned} &X=\left[\begin{array}{lll} 0 & 1 & 2 \\ 0 & 1 & 2 \end{array}\right]\\ &Y=\left[\begin{array}{lll} 1 & 1 & 1 \\ 0 & 0 & 0 \end{array}\right] \end{aligned}
這就是座標矩陣——橫座標矩陣XX中的每個元素,與縱座標矩陣YY中對應位置元素,共同構成一個點的完整座標。如B點座標(X12X_{12},Y12Y_{12})=(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()

在這裏插入圖片描述
到這裏,網格點和座標矩陣的概念就解釋清楚了。
那麼問題來了,如果需要的圖比較大,需要大量的網格點該怎麼辦呢?比如下面的這種
在這裏插入圖片描述
最直接但是最笨的方法,就是按照上面的方法把橫縱座標矩陣XXYY寫出來,然後再繪圖。

很明顯,對於網格點很多的情況根本沒法用。有啥好的辦法嗎?

有的,注意到我們之前練習的座標矩陣,其實有大量的重複。XX的每一行都一樣,YY的每一列都一樣。基於這種強烈的規律性,numpy提供的numpy.meshgrid()函數可以讓我們快速生成座標矩陣XXYY

語法: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]]

在這裏插入圖片描述
從輸出的結果來看,兩種方法生成的座標矩陣一模一樣。

參考文獻

numpy.meshgrid()理解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章