首頁 > 軟體

Numpy中Meshgrid函數基本用法及2種應用場景

2022-08-10 14:00:32

引言

近期在好幾個地方都看到meshgrid的使用,雖然之前也注意到meshgrid的用法。

但總覺得印象不深刻,不是太瞭解meshgrid的應用場景。

所以,本文將進一步介紹Numpy中meshgrid的用法。

Meshgrid函數的基本用法

在Numpy的官方文章裡,meshgrid函數的英文描述也顯得文縐縐的,理解起來有些難度。

可以這麼理解,meshgrid函數用兩個座標軸上的點在平面上畫網格。

用法:

  [X,Y]=meshgrid(x,y)

  [X,Y]=meshgrid(x)與[X,Y]=meshgrid(x,x)是等同的

  [X,Y,Z]=meshgrid(x,y,z)生成三維陣列,可用來計算三變數的函數和繪製三維立體圖

這裡,主要以[X,Y]=meshgrid(x,y)為例,來對該函數進行介紹。

[X,Y] = meshgrid(x,y) 將向量x和y定義的區域轉換成矩陣X和Y,其中矩陣X的行向量是向量x的簡單複製,而矩陣Y的列向量是向量y的簡單複製(注:下面程式碼中X和Y均是陣列,在文中統一稱為矩陣了)。

假設x是長度為m的向量,y是長度為n的向量,則最終生成的矩陣X和Y的維度都是 n*m (注意不是m*n)。

文字描述可能不是太好理解,下面通過程式碼演示下:

載入資料

import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

m, n = (5, 3)
x = np.linspace(0, 1, m)
y = np.linspace(0, 1, n)

X, Y = np.meshgrid(x,y)

檢視向量x和向量y

x

out:
array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ])

y

out:
array([ 0. ,  0.5,  1. ])

檢視矩陣X和矩陣Y

X

out:
array([[ 0.  ,  0.25,  0.5 ,  0.75,  1.  ],
       [ 0.  ,  0.25,  0.5 ,  0.75,  1.  ],
       [ 0.  ,  0.25,  0.5 ,  0.75,  1.  ]])

Y

out:
array([[ 0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0.5,  0.5,  0.5,  0.5,  0.5],
       [ 1. ,  1. ,  1. ,  1. ,  1. ]])

檢視矩陣對應的維度

X.shape

out:
(3, 5)

Y.shape

out:
(3, 5)

meshgrid函數的執行過程,可以通過下面的示意圖來加深理解:

再者,也可以通過在matplotlib中進行視覺化,來檢視函數執行後得到的網格化資料的結果

plt.plot(X, Y, marker='.', color='blue', linestyle='none')
plt.show()

當然,我們也可以獲得網格平面上座標點的資料,如下:

z = [i for i in zip(X.flat,Y.flat)]
z

out:
[(0.0, 0.0),
 (0.25, 0.0),
 (0.5, 0.0),
 (0.75, 0.0),
 (1.0, 0.0),
 (0.0, 0.5),
 (0.25, 0.5),
 (0.5, 0.5),
 (0.75, 0.5),
 (1.0, 0.5),
 (0.0, 1.0),
 (0.25, 1.0),
 (0.5, 1.0),
 (0.75, 1.0),
 (1.0, 1.0)]

Meshgrid函數的一些應用場景

Meshgrid函數常用的場景有等高線繪製及機器學習中SVC超平面的繪製(二維場景下)。

分別圖示如下:

(1)等高線

(2)SVC中超平面的繪製:

關於場景(1)和場景(2),將在後續的文章裡做進一步描述。

當然,可能還有些其他場景,這裡就不做進一步介紹了。

總結

到此這篇關於Numpy中Meshgrid函數基本用法及2種應用場景的文章就介紹到這了,更多相關Numpy Meshgrid函數用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com