Numpy中Meshgrid函數介紹及2種應用場景
近期在好幾個地方都看到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的維度都是 nm (注意不是mn)。
文字描述可能不是太好理解,下面通過代碼演示下:
載入數據
import numpy as npimport matplotlib.pyplot as plt%matplotlib inlinem, n = (5, 3)x = np.linspace(0, 1, m)y = np.linspace(0, 1, n)X, Y = np.meshgrid(x,y)
查看向量x和向量y
xout:array([ 0. , 0.25, 0.5 , 0.75, 1. ])yout:array([ 0. , 0.5, 1. ])
查看矩陣X和矩陣Y
Xout: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. ]])Yout:array([[ 0. , 0. , 0. , 0. , 0. ],[ 0.5, 0.5, 0.5, 0.5, 0.5],[ 1. , 1. , 1. , 1. , 1. ]])
查看矩陣對應的維度
X.shapeout:(3, 5)Y.shapeout:(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)]zout:[(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),將在後續的文章里做進一步描述。
當然,可能還有些其他場景,這裡就不做進一步介紹了。
如果您喜歡我的文章,歡迎關注微信公眾號:Python數據之道(ID:PyDataRoad)
推薦閱讀: