近期在好幾個(gè)地方都看到meshgrid的使用逗堵,雖然之前也注意到meshgrid的用法岛琼。
但總覺(jué)得印象不深刻床三,不是太了解meshgrid的應(yīng)用場(chǎng)景酥泛。
所以惕澎,本文將進(jìn)一步介紹Numpy中meshgrid的用法莉测。
Meshgrid函數(shù)的基本用法
在Numpy的官方文章里,meshgrid函數(shù)的英文描述也顯得文縐縐的唧喉,理解起來(lái)有些難度悔雹。
可以這么理解,meshgrid函數(shù)用兩個(gè)坐標(biāo)軸上的點(diǎn)在平面上畫網(wǎng)格欣喧。
用法:
[X,Y]=meshgrid(x,y)
[X,Y]=meshgrid(x)與[X,Y]=meshgrid(x,x)是等同的
[X,Y,Z]=meshgrid(x,y,z)生成三維數(shù)組腌零,可用來(lái)計(jì)算三變量的函數(shù)和繪制三維立體圖
這里,主要以[X,Y]=meshgrid(x,y)為例唆阿,來(lái)對(duì)該函數(shù)進(jìn)行介紹益涧。
[X,Y] = meshgrid(x,y) 將向量x和y定義的區(qū)域轉(zhuǎn)換成矩陣X和Y,其中矩陣X的行向量是向量x的簡(jiǎn)單復(fù)制,而矩陣Y的列向量是向量y的簡(jiǎn)單復(fù)制(注:下面代碼中X和Y均是數(shù)組驯鳖,在文中統(tǒng)一稱為矩陣了)闲询。
假設(shè)x是長(zhǎng)度為m的向量,y是長(zhǎng)度為n的向量浅辙,則最終生成的矩陣X和Y的維度都是 nm (注意不是mn)扭弧。
文字描述可能不是太好理解,下面通過(guò)代碼演示下:
加載數(shù)據(jù)
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. ]])
查看矩陣對(duì)應(yīng)的維度
X.shape
out:
(3, 5)
Y.shape
out:
(3, 5)
meshgrid函數(shù)的運(yùn)行過(guò)程记舆,可以通過(guò)下面的示意圖來(lái)加深理解:
再者鸽捻,也可以通過(guò)在matplotlib中進(jìn)行可視化,來(lái)查看函數(shù)運(yùn)行后得到的網(wǎng)格化數(shù)據(jù)的結(jié)果
plt.plot(X, Y, marker='.', color='blue', linestyle='none')
plt.show()
當(dāng)然泽腮,我們也可以獲得網(wǎng)格平面上坐標(biāo)點(diǎn)的數(shù)據(jù)御蒲,如下:
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函數(shù)的一些應(yīng)用場(chǎng)景
Meshgrid函數(shù)常用的場(chǎng)景有等高線繪制及機(jī)器學(xué)習(xí)中SVC超平面的繪制(二維場(chǎng)景下)。
分別圖示如下:
(1)等高線
(2)SVC中超平面的繪制:
關(guān)于場(chǎng)景(1)和場(chǎng)景(2)诊赊,將在后續(xù)的文章里做進(jìn)一步描述厚满。
當(dāng)然,可能還有些其他場(chǎng)景碧磅,這里就不做進(jìn)一步介紹了碘箍。
如果您喜歡我的文章遵馆,歡迎關(guān)注微信公眾號(hào):Python數(shù)據(jù)之道(ID:PyDataRoad)