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

 

你可能感兴趣的:(numpy)