numpy中的 numpy.c_ numpy.ravel numpy.mgrid的理解

這三個函數一般用於繪製網格座標點,自己在學習的時候也遇到了疑惑,現在做一個筆記整理一下。

 

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]])

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章