詳解numpy.meshgrid()方法使用
一句話解釋numpy.meshgrid()——生成網格點坐標矩陣。
關鍵詞:網格點,坐標矩陣
網格點是什么?坐標矩陣又是什么鬼?
看個圖就明白了:
圖中,每個交叉點都是網格點,描述這些網格點的坐標的矩陣,就是坐標矩陣。
再看個簡單例子
A,B,C,D,E,F是6個網格點,坐標如圖,如何用矩陣形式(坐標矩陣)來批量描述這些點的坐標呢?
答案如下:
這就是坐標矩陣——橫坐標矩陣
下面可以自己用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()
如果對matplotlib不熟悉,可能只知道用一列橫坐標(線性代數中的1維列向量),一列縱坐標生成(兩者元素個數相等)一些點。但是實際上,給matplotlib的坐標信息是矩陣也是可以的,只要橫縱坐標的尺寸一樣。都會按照對應關系生成點。
但是有需要注意的地方,按照矩陣給坐標點信息,matplotlib會把橫坐標矩陣中,每一列對應的點當做同一條線。
舉個例子,把上面的代碼plot
的linestyle=''
刪掉,或者變成linestyle='-'
(這個操作把圖的線型改為默認狀態(tài)),就會發(fā)現(xiàn)A-D是連接的,B-E是連接的,C-F是連接的,也即,會認為你輸入的是3條線,如圖
作為練習,自己試著生成如下結果
提示:線型等關鍵字參數設置可用如下代碼
plt.plot(x, y, marker='.', # 點的形狀為圓點 markersize=10, # 點設置大一點,看著清楚 linestyle='-.') # 線型為點劃線
答案
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()
到這里,網格點和坐標矩陣的概念就解釋清楚了。
那么問題來了,如果需要的圖比較大,需要大量的網格點該怎么辦呢?比如下面的這種
最直接但是最笨的方法,就是按照上面的方法把橫縱坐標矩陣
很明顯,對于網格點很多的情況根本沒法用。有啥好的辦法嗎?
有的,注意到我們練習題中的坐標矩陣,其實有大量的重復——
語法:X,Y = numpy.meshgrid(x, y)
輸入的x,y,就是網格點的橫縱坐標列向量(非矩陣)
輸出的X,Y,就是坐標矩陣。
我們來試驗一下:改寫第一個例子中的代碼,用numpy.meshgrid來實現(xiàn)。
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]]
最后給出上面這個圖的代碼
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,1000,20) y = np.linspace(0,500,20) X,Y = np.meshgrid(x, y) plt.plot(X, Y, color='limegreen', # 設置顏色為limegreen marker='.', # 設置點類型為圓點 linestyle='') # 設置線型為空,也即沒有線連接點 plt.grid(True) plt.show()
參考文獻
http://chabaoo.cn/article/166710.htm
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
利用Python的Twisted框架實現(xiàn)webshell密碼掃描器的教程
這篇文章主要介紹了利用Python的Twisted框架實現(xiàn)webshell密碼掃描器的教程,用到了Twisted框架的異步通信機制,需要的朋友可以參考下2015-04-04