溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

詳解numpy.meshgrid()方法使用

發(fā)布時間:2020-09-19 21:13:02 來源:腳本之家 閱讀:244 作者:千千Sama 欄目:開發(fā)技術(shù)

一句話解釋numpy.meshgrid()——生成網(wǎng)格點坐標矩陣。
關(guān)鍵詞:網(wǎng)格點,坐標矩陣

網(wǎng)格點是什么?坐標矩陣又是什么鬼?

看個圖就明白了:

詳解numpy.meshgrid()方法使用

圖中,每個交叉點都是網(wǎng)格點,描述這些網(wǎng)格點的坐標的矩陣,就是坐標矩陣。

再看個簡單例子

詳解numpy.meshgrid()方法使用

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

答案如下:

詳解numpy.meshgrid()方法使用

這就是坐標矩陣——橫坐標矩陣XXX中的每個元素,與縱坐標矩陣YYY中對應(yīng)位置元素,共同構(gòu)成一個點的完整坐標。如B點坐標詳解numpy.meshgrid()方法使用

下面可以自己用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', # 全部點設(shè)置為紅色
   marker='.', # 點的形狀為圓點
   linestyle='') # 線型為空,也即點與點之間不用線連接
plt.grid(True)
plt.show()

如果對matplotlib不熟悉,可能只知道用一列橫坐標(線性代數(shù)中的1維列向量),一列縱坐標生成(兩者元素個數(shù)相等)一些點。但是實際上,給matplotlib的坐標信息是矩陣也是可以的,只要橫縱坐標的尺寸一樣。都會按照對應(yīng)關(guān)系生成點。

但是有需要注意的地方,按照矩陣給坐標點信息,matplotlib會把橫坐標矩陣中,每一列對應(yīng)的點當做同一條線。

舉個例子,把上面的代碼plotlinestyle=''刪掉,或者變成linestyle='-'(這個操作把圖的線型改為默認狀態(tài)),就會發(fā)現(xiàn)A-D是連接的,B-E是連接的,C-F是連接的,也即,會認為你輸入的是3條線,如圖

詳解numpy.meshgrid()方法使用

作為練習(xí),自己試著生成如下結(jié)果

提示:線型等關(guān)鍵字參數(shù)設(shè)置可用如下代碼

plt.plot(x, y,
   marker='.', # 點的形狀為圓點
   markersize=10, # 點設(shè)置大一點,看著清楚
   linestyle='-.') # 線型為點劃線

詳解numpy.meshgrid()方法使用

答案

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, # 點設(shè)置大一點,看著清楚
   linestyle='-.') # 線型為點劃線
plt.grid(True)
plt.show()

到這里,網(wǎng)格點和坐標矩陣的概念就解釋清楚了。

那么問題來了,如果需要的圖比較大,需要大量的網(wǎng)格點該怎么辦呢?比如下面的這種

詳解numpy.meshgrid()方法使用

最直接但是最笨的方法,就是按照上面的方法把橫縱坐標矩陣XXX,YYY寫出來,就像上面練習(xí)題中的

詳解numpy.meshgrid()方法使用

很明顯,對于網(wǎng)格點很多的情況根本沒法用。有啥好的辦法嗎?

有的,注意到我們練習(xí)題中的坐標矩陣,其實有大量的重復(fù)——XXX的每一行都一樣,YYY的每一列都一樣?;谶@種強烈的規(guī)律性,numpy提供的numpy.meshgrid()函數(shù)可以讓我們快速生成坐標矩陣XXX,YYY。

語法:X,Y = numpy.meshgrid(x, y)

輸入的x,y,就是網(wǎng)格點的橫縱坐標列向量(非矩陣)
輸出的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', # 全部點設(shè)置為紅色
   marker='.', # 點的形狀為圓點
   linestyle='') # 線型為空,也即點與點之間不用線連接
plt.grid(True)
plt.show()
# 從輸出的結(jié)果來看,兩種方法生成的坐標矩陣一毛一樣。
[[0 1 2]
 [0 1 2]]
[[0 0 0]
 [1 1 1]]

詳解numpy.meshgrid()方法使用

最后給出上面這個圖的代碼

詳解numpy.meshgrid()方法使用

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è)置點類型為圓點
   linestyle='') # 設(shè)置線型為空,也即沒有線連接點
plt.grid(True)
plt.show()

參考文獻
https://www.jb51.net/article/166710.htm

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI