這三個函數一般用於繪製網格座標點,自己在學習的時候也遇到了疑惑,現在做一個筆記整理一下。
1、numpy中的mgrid
首先看一個例子
x,y = np.mgrid[-3:3:1,-3:3:1]
這裏我要生成一個從-3到2的矩陣步長爲1(結果爲:-3,-2,-1,0,1,2),注意mgrid是左閉右開,那麼生成的x和y都是什麼樣子的呢,生成的x按列展開,y按行展開,x和y的大小由mgrid[-3:3:1,-3:3:1]的步長決定,mgrid中括號中第一組-3到3每隔1取一個值,共6個,第二組-3到3每隔1取一個值,共6個,所以最後是6*6的矩陣,x按列展開,列的結構爲[-3,-2,-1,0,1,2]T(T爲轉置),然後把x複製6列,我們看一下結果。
x,y = np.mgrid[-3:3:1,-3:3:1]
x
Out[37]:
array([[-3, -3, -3, -3, -3, -3],
[-2, -2, -2, -2, -2, -2],
[-1, -1, -1, -1, -1, -1],
[ 0, 0, 0, 0, 0, 0],
[ 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2]])
同理y按行展開行結構爲[-3,-2,-1,0,1,2],複製6行
y
Out[38]:
array([[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2]])
現在我們再看一個例子
x,y = np.mgrid[-3:3:2,-3:3:1]
同理我們先看mgrid中括號裏邊的第一組-3:3:2,生成的數據爲-3,-1,1,總長爲3,第二組-3:3:1,生成的數據爲-3,-2,-1,0,1,2,總長爲6,那麼最後的結果就是x和y是3*6的矩陣,x同樣按照列展開,列結果爲[-3,-1,1]T(T爲轉置),複製6列,x結果
x,y = np.mgrid[-3:3:2,-3:3:1]
x
Out[40]:
array([[-3, -3, -3, -3, -3, -3],
[-1, -1, -1, -1, -1, -1],
[ 1, 1, 1, 1, 1, 1]])
y按照行展開,每行爲[-3,-2,-1,0,1,2],然後複製3行,y結果爲
y
Out[41]:
array([[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2]])
2、ravel函數
ravel函數就是將一個矩陣拉直,我們以x,y = np.mgrid[-3:3:1,-3:3:1]生成的矩陣爲例子。
x,y = np.mgrid[-3:3:1,-3:3:1]
x
Out[43]:
array([[-3, -3, -3, -3, -3, -3],
[-2, -2, -2, -2, -2, -2],
[-1, -1, -1, -1, -1, -1],
[ 0, 0, 0, 0, 0, 0],
[ 1, 1, 1, 1, 1, 1],
[ 2, 2, 2, 2, 2, 2]])
x.ravel()
Out[44]:
array([-3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1,
-1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
2, 2])
y
Out[45]:
array([[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2],
[-3, -2, -1, 0, 1, 2]])
y.ravel()
Out[46]:
array([-3, -2, -1, 0, 1, 2, -3, -2, -1, 0, 1, 2, -3, -2, -1, 0, 1,
2, -3, -2, -1, 0, 1, 2, -3, -2, -1, 0, 1, 2, -3, -2, -1, 0,
1, 2])
3、numpy.c_
這個函數就是用於將輸入的矩陣按照列來連接,列如
np.c_[np.array([1,2,3]),np.array([4,5,6])]
Out[50]:
array([[1, 4],
[2, 5],
[3, 6]])
結合mgrid,ravel,c_就可以生成二維網格座標點了
x,y=np.mgrid[-3:3:1,-3:3:1]
grid = np.c_[x.ravel(),y.ravel()]
grid
Out[53]:
array([[-3, -3],
[-3, -2],
[-3, -1],
[-3, 0],
[-3, 1],
[-3, 2],
[-2, -3],
[-2, -2],
[-2, -1],
[-2, 0],
[-2, 1],
[-2, 2],
[-1, -3],
[-1, -2],
[-1, -1],
[-1, 0],
[-1, 1],
[-1, 2],
[ 0, -3],
[ 0, -2],
[ 0, -1],
[ 0, 0],
[ 0, 1],
[ 0, 2],
[ 1, -3],
[ 1, -2],
[ 1, -1],
[ 1, 0],
[ 1, 1],
[ 1, 2],
[ 2, -3],
[ 2, -2],
[ 2, -1],
[ 2, 0],
[ 2, 1],
[ 2, 2]])