1、meshgrid函数用两个坐标轴上的点在平面上画格。
用法:
[X,Y]=meshgrid(x,y)
[X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的
[X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图
例如例题1:
x=-3:1:3;y=-2:1:2;
[X,Y]= meshgrid(x,y);
这里meshigrid(x,y)的作用是产生一个以向量x为行,向量y为列的矩阵,而x是从-3开始到3,每间隔1记下一个数据,并把这些数据集成矩阵X;同理y则是从-2到2,每间隔1记下一个数据,并集成矩阵Y。即
X=
-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3
Y =
-2 -2 -2 -2 -2 -2 -2
-1 -1 -1 -1 -1 -1 -1
0 0 0 0 0 0 0
1 1 1 1 1 1 1
2 2 2 2 2 2 2
2、 meshgrid是MATLAB中用于生成网格采样点的函数。在使用MATLAB进行3-D图形绘制方面有着广泛的应用。
生成绘制3-D图形所需的网格数据。在计算机中进行绘图操作时,往往需要一些采样点,然后根据这些采样点来绘制出整个图形。在进行3-D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x,y)。
[X,Y] = meshgrid(x,y)
上面的描述,我们可以知道,meshgrid返回的两个矩阵X、Y必定是行数、列数相等的,且X、Y的行数都等
于输入参数y中元素的总个数,X、Y的列数都等于输入参数x中元素总个数(这个结论可以通过查看meshgrid的源代码得到,可以通过示例程序得到验证)。
[X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的
[X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图
相关函数: plot3、mesh、surf、automesh、ndgrid
例如:axis off;
x=-2:.2:2;
y=-1:.2:3;
[xx,yy]=meshgrid(x,y);
zz=100*(yy-xx.^2).^2+(1-xx).^2;
surfc(xx,yy,zz);(三维图)
一个列子:
import numpy
all_points = numpy.random.random((1000, 1000)) # Input array
# Size of your array of points all_points:
(image_size_x, image_size_y) = all_points.shape
# Disk definition:
(center_x, center_y) = (500, 500)
radius = 10
x_grid, y_grid = numpy.meshgrid(numpy.arange(image_size_x), numpy.arange(image_size_y)) ————生成了(x, y)二维格网
# Array of booleans with the disk shape
disk = ((x_grid-center_x)**2 + (y_grid-center_y)**2) <= radius**2 ————disk 是距离中心格网点(center_x, center_y) 小于等于 radius**2(x, y)
# You can now do all sorts of things with the mask "disk":
# For instance, the following array has only 317 points (about pi*radius**2):
points_in_disk = all_points[disk]
# You can also use masked arrays:
points_in_circle2 = numpy.ma.masked_array(all_points, ~disk) ————数据掩膜处理
from matplotlib import pyplot
pyplot.imshow(points_in_circle2) ----------- matplotlib中使用imshow绘制二维图
https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css
------------------------------------------------------------------
meshgrid 函数用来生成网格矩阵,可以是二维网格矩阵。
- exp1_1:生成二维网格,用法为:[x y]=meshgrid(a b); % a 和b是一维数组,如a=[1 2 3]; b= [2 3 4]; 则生成的 X 和 Y 都是为 3X3 维的矩阵,
>> [x y]=meshgrid(a,b)
x =
1 2 3
1 2 3
1 2 3
y =
2 2 2
3 3 3
4 4 4
- exp1_2:生成二维网格,用法为:[x y]=meshgrid(a b); % a 和b是一维数组,如a=[1 2 3]; b= [2 3]; 则生成的 X 和 Y 都是为 3X2 维的矩阵,
>> [x y]=meshgrid(a,b)
x =
1 2 3
1 2 3
y =
2 2 2
3 3 3
- exp1_3:生成二维网格,用法为:[x y]=meshgrid(a b); % a 和b是一维数组,如a=[1 2]; b= [2 3 4]; 则生成的 X 和 Y 都是为 2X3 维的矩阵,
>> [x y]=meshgrid(a,b)
x =
1 2
1 2
1 2
y =
2 2
3 3
4 4
- exp2_1:生成三维网格,
x 的每行都是 1 2 3,共三行,y 每列都是2 3 4,共三列。
举个实例:估计函数:x*exp(-x^2-y^2),取值范围 -2 < x < 2, -2 < y < 2,
[X,Y] = meshgrid(-2:.2:2, -2:.2:2);
Z = Y .* exp(-X.^2 - Y.^2);
mesh(X,Y,Z)
对于三维网格,生成方式与二维一样 :[x y z]=meshgrid(a b c) ; %算出的结果根据二维的类推
附件:二维网格例子的结果图。
------------------------------------------------------------------
meshgrid和ndgrid的区别及用法
x0=-3:.6:3;
y0=-2:.4:2;
[x,y]=ndgrid(x0,y0);
[x,y]=ndgrid(x0,y0)
x =
Columns 1 through 6
-3.0000 -3.0000 -3.0000 -3.0000 -3.0000 -3.0000
-2.4000 -2.4000 -2.4000 -2.4000 -2.4000 -2.4000
-1.8000 -1.8000 -1.8000 -1.8000 -1.8000 -1.8000
-1.2000 -1.2000 -1.2000 -1.2000 -1.2000 -1.2000
-0.6000 -0.6000 -0.6000 -0.6000 -0.6000 -0.6000
0 0 0 0 0 0
0.6000 0.6000 0.6000 0.6000 0.6000 0.6000
1.2000 1.2000 1.2000 1.2000 1.2000 1.2000
1.8000 1.8000 1.8000 1.8000 1.8000 1.8000
2.4000 2.4000 2.4000 2.4000 2.4000 2.4000
3.0000 3.0000 3.0000 3.0000 3.0000 3.0000
Columns 7 through 11
-3.0000 -3.0000 -3.0000 -3.0000 -3.0000
-2.4000 -2.4000 -2.4000 -2.4000 -2.4000
-1.8000 -1.8000 -1.8000 -1.8000 -1.8000
-1.2000 -1.2000 -1.2000 -1.2000 -1.2000
-0.6000 -0.6000 -0.6000 -0.6000 -0.6000
0 0 0 0 0
0.6000 0.6000 0.6000 0.6000 0.6000
1.2000 1.2000 1.2000 1.2000 1.2000
1.8000 1.8000 1.8000 1.8000 1.8000
2.4000 2.4000 2.4000 2.4000 2.4000
3.0000 3.0000 3.0000 3.0000 3.0000
y =
Columns 1 through 6
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
-2.0000 -1.6000 -1.2000 -0.8000 -0.4000 0
Columns 7 through 11
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
0.4000 0.8000 1.2000 1.6000 2.0000
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
sp=csapi({x0,y0},z);
fnplt(sp);
- 其实,对于2D,3D使用meshgrid和ndgrid都可以,但要注意:
- [X1,X2,X3] = NDGRID(x1,x2,x3)<=>[X2,X1,X3] = MESHGRID(x2,x1,x3)
- 即x和y轴要反向
- 为何呢?帮助说的很清楚:因为NDGRID适用于n维空间,而meshgrid适用于笛卡尔空间。
- meshgrid和ndgrid的用法不同之处在于:2D、3D都可以使用(区别是x轴,y轴的转换),但对于4D、5D...只能使用ndgrid.
- 为什么要使用meshgrid?
- matlab使用矩阵的方式进行运算,对于2D而言,如果采样10个点(指x,y轴),那么对于x=第一个采样点,反映到矩阵就是10个,即不管y是哪个值,x的第一采样点保持不变;对y是同理。因此,2D产生的x和y都是两维矩阵。
- 最后给一个实例,说明两者在这里是通用的: