这三个函数一般用于绘制网格坐标点,自己在学习的时候也遇到了疑惑,现在做一个笔记整理一下。
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]])