1. ogrid
調(diào)取方式如下
X,Y=np.ogrid[0:2,0:3]
print(X.shape)
print(X)
print(Y.shape)
print(Y)
# 輸出
(2, 1)
[[0]
[1]]
(1, 3)
[[0 1 2]]
np.ogrid可以有多個(gè)切片索引乐纸,結(jié)果也對(duì)應(yīng)多個(gè)絮缅。
結(jié)果產(chǎn)生邏輯為
- 統(tǒng)一維度總數(shù)棋嘲,如上X與Y均變?yōu)?維县爬;
- 令第n個(gè)結(jié)果的值按照第n個(gè)切片索引可變,其他維度均為1软族,如X除第一個(gè)維度外其他維度均只有1個(gè)刷喜,即X[x,y]中y只能為0。
2. mgrid
與np.ogrid類似立砸,只是填充了其他維度掖疮,調(diào)取方式如下
X,Y=np.mgrid[0:2,0:3]
print(X.shape)
print(X)
print(Y.shape)
print(Y)
# 輸出
(2, 3)
[[0 0 0]
[1 1 1]]
(2, 3)
[[0 1 2]
[0 1 2]]
np.mgrid可以有多個(gè)切片索引,結(jié)果也對(duì)應(yīng)多個(gè)颗祝。
結(jié)果產(chǎn)生邏輯為
- 統(tǒng)一維度浊闪,如X和Y均變?yōu)?行3列
- 令第n個(gè)結(jié)果的值按照第n個(gè)切片索引可變,其他維度不變(第n個(gè)維度變化時(shí)數(shù)值變化螺戳,第n個(gè)維度不變其他維度變化時(shí)數(shù)值不變)
以第1個(gè)結(jié)果X為例搁宾,變化第1個(gè)維度,X[0,0]和X[1,0]值是不一樣的倔幼;而固定第一個(gè)維度變化第2個(gè)維度盖腿,X[0,0]、X[0,1]和X[0,2]值都是一樣的损同。
與ogrid相比翩腐,填充了其他維度。
3. meshgrid
首先要理解下繪圖時(shí)所說(shuō)的坐標(biāo)點(diǎn)陣和內(nèi)存中存儲(chǔ)的二維數(shù)組的不同
坐標(biāo)與矩陣
對(duì)于點(diǎn)陣A(x,y)膏燃,當(dāng)我們考慮一個(gè)笛卡爾坐標(biāo)系時(shí)茂卦,x對(duì)應(yīng)于列;而考慮矩陣(二維數(shù)組)時(shí)组哩,x卻對(duì)應(yīng)于行等龙。
如x=0對(duì)應(yīng)坐標(biāo)系中的第一列,矩陣的第一行禁炒。meshgrid的參數(shù)indexing對(duì)應(yīng)上述兩種選項(xiàng)而咆,默認(rèn)為坐標(biāo)模式
數(shù)組模式(indexing='ij')等價(jià)于mgrid,即meshgrid在功能上包含mgrid幕袱,(sparse=True包含ogrid)
坐標(biāo)模式(indexing='xy') 只轉(zhuǎn)化前兩個(gè)輸出值為坐標(biāo)形式暴备,通常用于繪圖,如在matplotlib中常用該模式们豌。
舉例:
#meshgrid函數(shù)調(diào)用涯捻,生成兩個(gè)3行2列的二維數(shù)組
X1,Y1=np.meshgrid(np.arange(0,2,1),np.arange(0,3,1))
print(X1.shape)
print(X1)
#mgrid切片器調(diào)用浅妆,生成兩個(gè)2行3列的二維數(shù)組
X2,Y2=np.mgrid[0:2,0:3]
print(X2.shape)
print(X2)
#等價(jià)于X2,Y2=np.meshgrid(np.arange(0,3,1),np.arange(0,2,1),indexing='ij')
#輸出
(3, 2)
[[0 1]
[0 1]
[0 1]]
(2, 3)
[[0 0 0]
[1 1 1]]
則對(duì)于坐標(biāo)(x,y),有
X1[y,x]=X2[x,y]
Y1[y,x]=Y2[x,y]
4. np.mgrid與np.meshgrid的不同
meshgrid是函數(shù)形式調(diào)用障癌,mgrid是切片器形式調(diào)用
meshgrid默認(rèn)采用坐標(biāo)模式凌外,mgrid只有矩陣模式,在功能上meshgrid包含mgrid和ogrid
對(duì)于二維情況涛浙,兩者結(jié)果轉(zhuǎn)置相等康辑,即X1=np.transpose(X2),Y1=np.transpose(Y2)
一般使用Y,X=np.mgrid[slice(0,y,dy),slice(0,x,dy)]來(lái)快速生成'xy'模式的X和Ymeshgrid的坐標(biāo)模式只支持二維情況