numpy中的meshgrid函式
numpy中的meshgrid函式
2017年12月17日 20:50:46 修煉之路 閱讀數:5170更多
個人分類: numpy修煉之路
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/sinat_29957455/article/details/78825945
numpy官方文件meshgrid函式幫助文件https://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html
meshgrid(*xi, **kwargs)
功能:從一個座標向量中返回一個座標矩陣
引數:
x1,x2...,xn:陣列,一維的陣列代表網格的座標。
indexing:{'xy','ij'},笛卡爾座標'xy'或矩陣'ij'下標作為輸出,預設的是笛卡爾座標。
sparse:bool型別,如果為True,返回一個稀疏矩陣儲存在記憶體中,預設是False。
copy:bool型別,如果是False,返回一個原始陣列的檢視儲存在記憶體中,預設是True。如果,sparse和copy都為False,將有可能返回一個不連續的陣列。而且,如果廣播陣列的元素超過一個,可以使用一個獨立的記憶體。如果想要對這個陣列進行寫操作,請先拷貝這個陣列。
返回值:x1,x2,....,xn:ndarray(numpy陣列)
可能看完官方的文件之後還是一臉懵逼,下面通過幾個例子來解釋說明一下。
-
nx,ny = (3,2)
-
#從0開始到1結束,返回一個numpy陣列,nx代表陣列中元素的個數
-
x = np.linspace(0,1,nx)
-
#[ 0. 0.5 1. ]
-
y = np.linspace(0,1,ny)
-
# [0. 1.]
-
xv,yv = np.meshgrid(x,y)
-
'''
-
xv
-
[[ 0. 0.5 1. ]
-
[ 0. 0.5 1. ]]
-
yv
-
[[ 0. 0. 0.]
-
[ 1. 1. 1.]]
-
'''
通過上面的例子,其實可以發現meshgrid函式將兩個輸入的陣列x和y進行擴充套件,前一個的擴充套件與後一個有關,後一個的擴充套件與前一個有關,前一個是豎向擴充套件,後一個是橫向擴充套件。因為,y的大小為2,所以x豎向擴充套件為原來的兩倍,而x的大小為3,所以y橫向擴充套件為原來的3倍。通過meshgrid函式之後,輸入由原來的陣列變成了一個矩陣。通過使用meshgrid函式,可以產生一個表格矩陣,下面用一個例子來展示產生一個2*2網格的座標,每個網格的大小為1。
-
nx,ny = (3,3)
-
#從0開始到1結束,返回一個numpy陣列,nx代表陣列中元素的個數
-
x = np.linspace(0,2,nx)
-
# [0. 1. 2.]
-
y = np.linspace(0,2,ny)
-
# [0. 1. 2.]
-
xv,yv = np.meshgrid(x,y)
-
print(xv.ravel())
-
#[ 0. 1. 2. 0. 1. 2. 0. 1. 2.]
-
print(yv.ravel())
-
#[ 0. 0. 0. 1. 1. 1. 2. 2. 2.]
ravel函式是將矩陣變為一個一維的陣列,其中xv.ravel()就表示x軸的座標,yv.ravel()就表示了y軸的座標,我們將x軸的座標和y軸的座標進行一一對應,就產生了一個2*2大小為1的網格中的9個點的座標。
如果,將sparse引數設定為True,就不會向上面一樣進行擴充套件了,也就是說它產生的網格座標不是所有的網格座標,而是網格對角線上的座標點。
-
nx,ny = (3,3)
-
#從0開始到1結束,返回一個numpy陣列,nx代表陣列中元素的個數
-
x = np.linspace(0,2,nx)
-
# [ 0. 0.5 1. ]
-
y = np.linspace(0,2,ny)
-
# [ 1. 1.5 2. ]
-
xv,yv = np.meshgrid(x,y,sparse=True)
-
print(xv)
-
#[[ 0. 1. 2.]]
-
print(yv)
-
'''
-
[[ 0.]
-
[ 1.]
-
[ 2.]]
-
'''