詳解numpy.meshgrid()方法使用
一句話解釋numpy.meshgrid()——生成網(wǎng)格點(diǎn)坐標(biāo)矩陣。
關(guān)鍵詞:網(wǎng)格點(diǎn),坐標(biāo)矩陣
網(wǎng)格點(diǎn)是什么?坐標(biāo)矩陣又是什么鬼?
看個圖就明白了:

圖中,每個交叉點(diǎn)都是網(wǎng)格點(diǎn),描述這些網(wǎng)格點(diǎn)的坐標(biāo)的矩陣,就是坐標(biāo)矩陣。
再看個簡單例子

A,B,C,D,E,F是6個網(wǎng)格點(diǎn),坐標(biāo)如圖,如何用矩陣形式(坐標(biāo)矩陣)來批量描述這些點(diǎn)的坐標(biāo)呢?
答案如下:

這就是坐標(biāo)矩陣——橫坐標(biāo)矩陣
下面可以自己用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', # 全部點(diǎn)設(shè)置為紅色 marker='.', # 點(diǎn)的形狀為圓點(diǎn) linestyle='') # 線型為空,也即點(diǎn)與點(diǎn)之間不用線連接 plt.grid(True) plt.show()
如果對matplotlib不熟悉,可能只知道用一列橫坐標(biāo)(線性代數(shù)中的1維列向量),一列縱坐標(biāo)生成(兩者元素個數(shù)相等)一些點(diǎn)。但是實(shí)際上,給matplotlib的坐標(biāo)信息是矩陣也是可以的,只要橫縱坐標(biāo)的尺寸一樣。都會按照對應(yīng)關(guān)系生成點(diǎn)。
但是有需要注意的地方,按照矩陣給坐標(biāo)點(diǎn)信息,matplotlib會把橫坐標(biāo)矩陣中,每一列對應(yīng)的點(diǎn)當(dāng)做同一條線。
舉個例子,把上面的代碼plot的linestyle=''刪掉,或者變成linestyle='-'(這個操作把圖的線型改為默認(rèn)狀態(tài)),就會發(fā)現(xiàn)A-D是連接的,B-E是連接的,C-F是連接的,也即,會認(rèn)為你輸入的是3條線,如圖

作為練習(xí),自己試著生成如下結(jié)果
提示:線型等關(guān)鍵字參數(shù)設(shè)置可用如下代碼
plt.plot(x, y, marker='.', # 點(diǎn)的形狀為圓點(diǎn) markersize=10, # 點(diǎn)設(shè)置大一點(diǎn),看著清楚 linestyle='-.') # 線型為點(diǎn)劃線

答案
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='.', # 點(diǎn)的形狀為圓點(diǎn)
markersize=10, # 點(diǎn)設(shè)置大一點(diǎn),看著清楚
linestyle='-.') # 線型為點(diǎn)劃線
plt.grid(True)
plt.show()
到這里,網(wǎng)格點(diǎn)和坐標(biāo)矩陣的概念就解釋清楚了。
那么問題來了,如果需要的圖比較大,需要大量的網(wǎng)格點(diǎn)該怎么辦呢?比如下面的這種

最直接但是最笨的方法,就是按照上面的方法把橫縱坐標(biāo)矩陣

很明顯,對于網(wǎng)格點(diǎn)很多的情況根本沒法用。有啥好的辦法嗎?
有的,注意到我們練習(xí)題中的坐標(biāo)矩陣,其實(shí)有大量的重復(fù)——
語法:X,Y = numpy.meshgrid(x, y)
輸入的x,y,就是網(wǎng)格點(diǎn)的橫縱坐標(biāo)列向量(非矩陣)
輸出的X,Y,就是坐標(biāo)矩陣。
我們來試驗(yàn)一下:改寫第一個例子中的代碼,用numpy.meshgrid來實(shí)現(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', # 全部點(diǎn)設(shè)置為紅色 marker='.', # 點(diǎn)的形狀為圓點(diǎn) linestyle='') # 線型為空,也即點(diǎn)與點(diǎn)之間不用線連接 plt.grid(True) plt.show()
# 從輸出的結(jié)果來看,兩種方法生成的坐標(biāo)矩陣一毛一樣。 [[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', # 設(shè)置顏色為limegreen marker='.', # 設(shè)置點(diǎn)類型為圓點(diǎn) linestyle='') # 設(shè)置線型為空,也即沒有線連接點(diǎn) plt.grid(True) plt.show()
參考文獻(xiàn)
http://www.dhdzp.com/article/166710.htm
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)emoji表情的簡單方法
“表情包”是一種利用圖片來表示感情的一種方式。下面這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)emoji表情的簡單方法,需要的朋友可以參考下2021-05-05
Python?opencv圖像膨脹與腐蝕處理實(shí)例探究
這篇文章主要介紹了Python?opencv圖像膨脹與腐蝕處理實(shí)例探究2024-01-01
Python3正則表達(dá)式之:(?(id/name)yes-pattern|no-pattern)條件性匹配
(?(id/name)yes-pattern|no-pattern)的作用是對于給出的id或者name,先嘗試去匹配 yes-pattern部分的內(nèi)容,如果id或name條件不滿足,則去匹配no-pattern部分的內(nèi)容2021-10-10
Python中Parsel的兩種數(shù)據(jù)提取方式詳解
在網(wǎng)絡(luò)爬蟲的世界中,數(shù)據(jù)提取是至關(guān)重要的一環(huán),Python 提供了許多強(qiáng)大的工具,其中之一就是 parsel 庫,下面我們就來深入學(xué)習(xí)一下Parsel的兩種數(shù)據(jù)提取方式吧2023-12-12
python中將函數(shù)賦值給變量時(shí)需要注意的一些問題
變量賦值是我們在日常開發(fā)中經(jīng)常會遇到的一個問題,下面這篇文章主要給大家介紹了關(guān)于python中將函數(shù)賦值給變量時(shí)需要注意的一些問題,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-08-08
python 拷貝特定后綴名文件,并保留原始目錄結(jié)構(gòu)的實(shí)例
下面小編就為大家分享一篇python 拷貝特定后綴名文件,并保留原始目錄結(jié)構(gòu)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

