Python-Numpy模塊Meshgrid函數
Numpy中關於Meshgrid函數:meshgrid官方。
1.Meshgrid前言
meshgrid函數就是用兩個坐標軸上的點在平面上畫網格(當然這裡傳入的參數是兩個的時候)。當然我們可以指定多個參數,比如三個參數,那麼我們的就可以用三個一維的坐標軸上的點在三維平面上畫網格。
2.Meshgrid的參數
numpy.meshgrid
(* xi,** kwargs )
- 。array_like代表網格坐標的一維數組,這裡可以傳入多個一維數組的值。但是這裡需要注意的就是如果我們給傳入的是一個矩陣(多維數組)的話,他會自動把這個矩陣轉換成一維數組;
- 索引(indexing):(xy[笛卡爾],ij[矩陣]),可選。默認是xy,下面會詳細解釋一下;
- 稀疏(sparse):bool,可選。默認為False。如果為True為了節省內存會返回一個稀疏矩陣;
- 複製(copy):bool,可選。默認為True。如果為False則為了節省內存返回源始的視圖。
返回值:
- :ndarray。對於二維數組來說,我們的參數是 兩個一維數組,我們設 形狀為N, 的形狀為M。那麼他的返回值是一個list列表,裡面存放著兩個矩陣,我們可以通過解包操作來獲取 與 兩個矩陣,這裡的返回值 , 。我們指定了indexing參數,如果indexing = xy(默認)我們返回的 與 矩陣的形狀是(M,N);如果indexing = ij的話我們返回的 與 矩陣的形狀就是(N,M)。
3.indexing參數
上面介紹了indexing參數有兩個值xy和ij,默認值為xy。那他們兩個之間有什麼區別呢?其中xy代表的是笛卡爾,ij代表的是矩陣。我們直接通過結果來看。
import numpy as npx = np.array([1,2,3])y = np.array([4,5,6,7])xv,yv = np.meshgrid(x,y,indexing = xy)xv2,yv2 = np.meshgrid(x,y,indexing = ij)print(-----向量的形狀-----)print(x.shape)print(y.shape)print(-----xy-----)print(xv.shape)print(yv.shape)print(-----ij-----)print(xv2.shape)print(yv2.shape)-----向量的形狀-----(3,)(4,)-----xy-----(4, 3)(4, 3)-----ij-----(3, 4)(3, 4)
從上面我們可以看出,對於二維數組來說,對於兩個長度為3和4的一維數組,我們設N = 3 ,M = 4。對於我們indexing = xy(默認)來說,得到xv以及yv矩陣的形狀是(M,N)也就是(4,3);那對於indexing = ij我們的xv以及yv矩陣的形狀是(N,M)也就是(3,4)。
那對於三維來說,參數是三個一維數組,並且一維數組的形狀分別是N,M,P,那麼如果indexing = xy的話返回的三個矩陣xv,yv,zv的形狀都是(M,N,P);如果indexing = ij的話返回的是三個矩陣xv,yv,zv的形狀都是(N,M,P)
import numpy as npx = np.array([1,2,3])y = np.array([4,5,6,7])xv, yv = np.meshgrid(x, y, sparse=False, indexing=ij)for i in zip(xv.flat,yv.flat): print(i)print(----------)xv, yv = np.meshgrid(x, y, sparse=False, indexing=xy)for i in zip(xv.flat,yv.flat): print(i)
4.如何使用
- xv,yv = meshgrid(x,y)
- xv,yv = meshgrid(x)與xv,yv = meshgrid(x,x)是等同的
- xv,yv,zv = meshgrid(x,y,z)生成三維數組,可用來計算三變數的函數和繪製三維立體圖
上面的這些都是直接進行解包後的返回值。其實他返回的是一個list列表,列表中存放的xv,yv,zv的這些numpy數組。
import numpy as npx = np.array([1,2,3]) #X_{x} = 3y = np.array([4,5,6,7]) #X_{y} = 4xv,yv = np.meshgrid( x , y )print(xv)print(yv)[[1 2 3] [1 2 3] [1 2 3] [1 2 3]][[4 4 4] [5 5 5] [6 6 6] [7 7 7]]
我們通過對兩個參數來一步一步的分析來看,看得到的結果是如何變成一個網格的:
x:表示我們的一維向量(1,2,3),他的N = 3
y:表示我們的一維向量(4,5,6,7),他的N = 4xv:表示x坐標軸上的坐標矩陣yv:表示y坐標軸上的坐標矩陣
x = np.array([1,2,3]) #x = (x1,x2,x3)y = np.array([4,5,6,7]) #y = (y1,y2,y3,y4)
xv,yv = np.meshgrid( x , y )
我們把我們的一維向量 看成了 ,我們也可以看上面我輸出的xv[[1 2 3]
[1 2 3] [1 2 3] [1 2 3]],如果看成是 ,也就是4個向量,如圖所示。我們把我們的y向量看成了 ,然後我們從上面的列印出來的結果[[4 4 4] [5 5 5][6 6 6] [7 7 7]],我們的向量被豎著放起,然後推廣成三列。正如我們的yv矩陣所示。
我們的兩個一維數組形成的網格,我們就可以通過上面的分析得到:
推薦閱讀:
※跟黃哥學習python第二章
※更改Django用戶密碼[備忘]
※第八章 對象引用、可變性
※Python基礎語法知識總結與實踐(二)