第一:meshgrid
官网解释
meshgrid函数通常使用在数据的矢量化上。
它适用于生成网格型数据,可以接受两个一维数组生成两个二维矩阵,对应两个数组中所有的(x,y)对。
np.meshgrid(*xi, **kwargs)
Return coordinate matrices from coordinate vectors.
Make N-D coordinate arrays for vectorized evaluations of N-D scalar/vector fields over N-D grids, given one-dimensional coordinate arrays x1, x2,..., xn.
根据提供的n个向量,返回N维度的矩阵坐标
使用解释
[X,Y]=meshgrid(x,y)
[X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的,即如果生成x和y相等,可以写一个向量
[X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图
注:其中x和y均为行向量
二维数据进行解释:
meshgrid中的结果X是以第一参数x在垂直方向上的复制和堆叠。
meshgrid中的结果Y是以第二参数y的转置(变为列向量)在水平方向上的复制和堆叠。
meshgrid中的结果X和Y的维度都是:len(y) * len(x)
meshgrid的作用是:
根据传入的两个一维数组参数生成两个数组元素的列表。
如果第一个参数是xarray,维度是xdimesion,也就是列的个数,
第二个参数是yarray,维度是ydimesion,也就是行的个数,
那么生成的第一个二维数组是以xarray为行,共ydimesion行的向量;
而第二个二维数组是以yarray的转置为列,共xdimesion列的向量。
t1 = np.array([1,2,3])
t2 = np.array([4,5,6,7])
x,y = np.meshgrid(t1,t2)
x.shape
#(4, 3)
y.shape
#(4, 3)
结果展示(matplotlib)
plt.plot(x,y, marker='.', color='red', linestyle='none')
plt.show()
获得网格上坐标点的数据
list(x.flat) #[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
list(y.flat) #[4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7]
[i for i in zip(x.flat,y.flat)]
[(1, 4),
(2, 4),
(3, 4),
(1, 5),
(2, 5),
(3, 5),
(1, 6),
(2, 6),
(3, 6),
(1, 7),
(2, 7),
(3, 7)]
参考
图片来源于:https://pic4.zhimg.com/80/v2-a7f1c996c371d1167a0fb7b5273c6d01_hd.jpg
第二:mgrid
以多个矩阵的形式进行返回
第1返回值为第1维数据在最终结构中的分布,第一参数上的每个值组成一个列向量在水平上进行重复
第2返回值为第2维数据在最终结构中的分布,以此类推。第二参数上的每个值组成一个行向量在垂直方向上进行重复(分布以矩阵形式呈现)
返回形状:len(第一参数) X len(第二参数) X len(第三参数)...
例如np.mgrid[X , Y]
样本(i,j)的坐标为 (X[i,j] ,Y[i,j]),X代表第1维,Y代表第2维,在此例中分别为横纵坐标。
比如:i=1,j=2,即坐标(2,6)
第三:关系
meshgrid返回值相应元素的转置和mgrid返回值相应元素结果上一致。