matlab meshgrid作用,【 MATLAB 】ndgrid 和 meshgrid 对比理解以及应用

article/2025/8/27 2:48:34

目录

背景

本博文主要分析 ndgrid, meshgrid是附送的,都是类似的东西,学会了一个,另一个很容易就理解了。

为什么会对 ndgrid 感兴趣呢?因为对它的不理解,导致我少写了几篇博文,最后,决定将 ndgrid 总结一番,去除这个绊脚石,或者加工一下,让它称为垫脚石。

我决定从低维到高维的思路来分析 ndgrid 到底怎么用?

ndgrid以及meshgrid其实就是将利用坐标轴上的坐标生成一些网格,一维的情况就不存在网格,所以坐标还是坐标;二维的情况,ndgrid的输入是两个矢量,可以看做是分别在x和y轴上的坐标,然后根据这些坐标生成网格点,所以输出肯定是2阶矩阵了。依次类推,可以得到高维的情况。

下面这句话,摘自网络看到的内容:对于网格矢量(gird vectors)x1gv,x2gv,x3gv,长度分别是M,N,P。ndgrid(x1gv, x2gv)函数输出一个MXN的数组,而meshgrid(x1gv, x2gv)输出一个N*M的数组,类似的,ndgrid(x1gv, x2gv, x3gv)函数输出一个M*N*P 的数组,而meshgrid(x1gv, x2gv, x3gv)输出一个N*M*P 的数组。

看不懂没关系,这里只是提前预热下而已,正式的内容下面一一呈现。

主题是N-D空间中的矩形网格。

一维空间中的矩形网格:

>> a = -3:3

a =

-3    -2    -1     0     1     2     3

>> x = ndgrid(a)

x =

-3

-2

-1

0

1

2

3

对一维空间,也即一个坐标轴来划分网格意义不大,主要是做一个对比作用。

二维空间中的矩形网格:

>> a = -3:3

a =

-3    -2    -1     0     1     2     3

>> b = -2:2

b =

-2    -1     0     1     2

>> [x,y]=ndgrid(a,b)

x =

-3    -3    -3    -3    -3

-2    -2    -2    -2    -2

-1    -1    -1    -1    -1

0     0     0     0     0

1     1     1     1     1

2     2     2     2     2

3     3     3     3     3

y =

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

-2    -1     0     1     2

02041101ac660326cc634005f0a75388.png

从工作空间可以看到,a是7维的向量,b是5维的向量,那么使用ndgrid生成的网格点,x是一个7*5的矩阵,其x的列是a的复制;y是一个7*5的矩阵,b构成y的行,也即是说,y的行是b的复制。

这其实不难理解,毕竟是低维的情况,x这个矩阵的列可以看成是垂直于b轴的坐标点,而b有5个坐标点,所以x有5个列;y这个矩阵的行可以看成是垂直于a轴的坐标点,由于a有7个坐标点,所以y有7个行。x和y的交叉不就构成了一个又一个的网格点了吗,这也就是生成网格的作用体现出现了。

后面更高维的情况类似,我将不进行这样描述了,只给出范例。

这时就需要和meshgrid对比一下了:

>> [x1,y1] = meshgrid(a,b)

x1 =

-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

y1 =

-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

meshgrid也用于生成网格点,只是实现的方式好像有点不一样,同样是a,b两个向量作为输入,输出x1的行成了a的拷贝,b有多少个坐标,a就有多少个行,也就是5行;y的列成了b的拷贝,a有多少个坐标,y就有多少个列,可见有7个列。

二者也构成了一系列的网格点。

三维空间中的矩形网格:

>> a = -3:3

a =

-3 -2 -1 0 1 2 3

>> b=-2:2

b =

-2 -1 0 1 2

>> c=-1:1

c =

-1 0 1

>> [x,y,z]=ndgrid(a,b,c)

x(:,:,1) =

-3 -3 -3 -3 -3

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

x(:,:,2) =

-3 -3 -3 -3 -3

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

x(:,:,3) =

-3 -3 -3 -3 -3

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

y(:,:,1) =

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

y(:,:,2) =

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

y(:,:,3) =

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

z(:,:,1) =

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

-1 -1 -1 -1 -1

z(:,:,2) =

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

z(:,:,3) =

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

也很符合预期吧。

同样需要和meshgrid对比下:

>> [x1,y1,z1]=meshgrid(a,b,c)

x1(:,:,1) =

-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

x1(:,:,2) =

-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

x1(:,:,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

-3 -2 -1 0 1 2 3

y1(:,:,1) =

-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

y1(:,:,2) =

-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

y1(:,:,3) =

-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

z1(:,:,1) =

-1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1

-1 -1 -1 -1 -1 -1 -1

z1(:,:,2) =

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0 0 0 0 0 0

z1(:,:,3) =

1 1 1 1 1 1 1

1 1 1 1 1 1 1

1 1 1 1 1 1 1

1 1 1 1 1 1 1

1 1 1 1 1 1 1

语法对比

从帮助文档上,我们可以得知,ndgrid的语法形式有两种:

[X1,X2,...,Xn] = ndgrid(x1,x2,...,xn)

[X1,X2,...,Xn] = ndgrid(xg)

事实上,上面我们的举例只是说到了第一种,那第二种是什么情况呢?

其实更加的简单,xg也是一个向量,n为多少,那么替换成第一种形式,就相当于输入有多少个xg向量。

使用二维网格为例试一下:

>> clear

>> a = -2:2

a =

-2 -1 0 1 2

>> [x1,x2] = ndgrid(a);

>> [x1,x2] = ndgrid(a)

x1 =

-2 -2 -2 -2 -2

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

2 2 2 2 2

x2 =

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

是不是和预期的一样。

那么meshgrid是不是也有这种用法呢?

且看meshgrid的语法格式:

[X,Y] = meshgrid(x,y)

[X,Y] = meshgrid(x)

[X,Y,Z] = meshgrid(x,y,z)

[X,Y,Z] = meshgrid(x)

这里透露出了一个大信息,首先,meshgrid肯定也能那么用;其实,meshgrid只能用于生成2维网格以及三维网格。

对比,ndgrid的语法格式:

[X1,X2,...,Xn] = ndgrid(x1,x2,...,xn)

[X1,X2,...,Xn] = ndgrid(xg)

可见,ndgrid对维度是没有限制的。

1、在网格域上计算函数:

a3d56cdc265a00f4f30f04eafb75396c.png

% Evaluate Function Over Gridded Domain

clear

clc

close all

[X1,X2] = ndgrid(-2:.2:2);

Z = X1 .* exp(-X1.^2 - X2.^2);

mesh(X1,X2,Z)

16faff2bc00c29153674c4ef69d5cb38.png

2、插入数据

1177ddf7ea449cc2d61d848998c87765.png

%interpolate data

clear

clc

close all

[X,Y] = ndgrid(-5:0.5:5);

f = sin(X.^2) * cos(Y.^2);

surf(X,Y,f)

a7539e82dad04f3700912ad8b1f246ea.png

ee275428319917ce0d12c21d041f4614.png

%interpolate data

clear

clc

close all

[X,Y] = ndgrid(-5:0.5:5);

f = sin(X.^2) * cos(Y.^2);

subplot(2,1,1);

surf(X,Y,f)

% 使用更精细的网格在点之间插值,并绘制结果图。

[X1,Y1] = ndgrid(-5:0.125:5);

F = interpn(X,Y,f,X1,Y1,'spline');

subplot(2,1,2);

surf(X1,Y1,F)

e41707ccb267461e4cc7ecb3df27872e.png

参考链接:帮助文档

本文同步分享在 博客“李锐博恩”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。


http://chatgpt.dhexx.cn/article/DriY3ZnM.shtml

相关文章

Meshgrid用法

在matlab绘制三维曲面图或三维网格图时经常会用到meshgrid指令 比如:通常在确定向量x,y的基础上,使用meshgrid生成新的矩阵数据[X,Y],再输入函数Zf(X,Y),最后使用mesh或surf命令生成三维网格图或三维曲面图。 那么meshgrid指令究竟是什么意思呢&#x…

【matlab】函数meshgrid的用法详解(生成网格矩阵)和ndgrid的区别及用法

------------------------------------------------------------------ meshgrid 函数用来生成网格矩阵,可以是二维网格矩阵。 exp1_1:生成二维网格,用法为:[x y]meshgrid(a b); % a 和b是一维数组,如a[1 2 3]; b [2 3 4]; 则生成…

Python基础(二):Numpy函数介绍:Meshgrid,mgrid,append等

文章目录 np.meshgrid函数np.mgrid函数np.append()函数 [5]参考资料 np.meshgrid函数 meshgrid函数通常使用在数据的矢量化上。它适用于生成网格型数据,可以接受两个一维数组生成两个二维矩阵,对应两个数组中所有的(x,y)对。 meshgrid的作用是&#xf…

【Python】Numpy 中 Meshgrid 函数介绍及简单应用

简单介绍Meshgrid 文字解释 Meshgrid功能为将两个坐标轴上的点转化为平面上的网格,即将两组一维数据分别转化为二维数据,原理为简单复制(通过简单复制将以为数组转化为二维数组,即格点)。 以上的详细解释&#xff1a…

图像处理之matlab中meshgrid函数用法详解

一、meshgrid()函数基本调用格式 meshgrid函数用来生成网格矩阵,既可以是二维网格矩阵,又可以是三维网格矩阵。 1、[X,Y] meshgrid(x,y) :基于向量x和y中包含的坐标返回二维网格坐标。X是一个矩阵,每一行是x的一个副本,Y也是一…

python meshgrid()理解

本文的目的是记录meshgrid()的理解过程: step1. 通过一个示例引入创建网格点矩阵; step2. 基于步骤1,说明meshgrid()的作用; step3. 详细解读meshgrid()的官网定义; 说明:step1和2 的数据都是基于笛卡尔坐标系的矩阵,目的是为了方便讨论。 step1. 通…

[MATLAB]中meshgrid函数的用法与实践(学习笔记)

今天在看点目标成像仿真程序的时候,看到了meshgrid函数,看了matlab的帮助文档后理解了一点,特此记录学习过程。 目录 一、meshgrid函数二、举例验证 三、创建二维网格绘制曲面图四、总结五、meshgrid函数源代码(仅供参考&#xff…

计算机网络原理(交换机,路由器详解)

前言 本人是大一新生,对网络知识的了解也只是一知半解,虽然煞费苦心,但这篇文章中肯定还会有很多错误,希望大佬们发现问题后能予以纠正 网络协议 这些东西主要涉及在局域网,osi模型中处在第二层和第三层&#xff0c…

交换机和路由器区别

交换机路由器简单理解 以快递为例: 首先我们要把我们传输的数据就比拟成收发的快递货物。 然后我们要知道的是,我们手中的手机和电脑等一些使用设备,它们都有一个固定的MAC地址,这个MAC地址就相当于快递系统中的接收人&#xf…

以太网交换机和路由器的区别(转载)

以太网交换机和路由器是两个不同的网络设备,很多朋友却弄不清楚它们彼此之间的区别,下面简单介绍下。 在osi七层模型上来分析,交换机在第二层工作,路由器在第三层上工作。但是随着技术的发展,一些交换机集成了一些第三…

交换机和路由器有什么区别

交换机 (英文:Switch,意为“开关”)是一种用于电信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。 路由器 (Router&#xf…

交换机与路由器技术

交换机的基本配置 一、思科设备命令行基础 1、进入设备命令行界面 设备支持命令行 去看设备上的接口,是否有console 需要用超级终端进行连接 puttsecret CRTXshell 2、命令行基础 思科设备上的命令行模式 用户模式:查看统计信息(一般情况下用的非常…

思科交换机和路由器

交换机 进入模式 no switchport: no switchport这条命令的意思是:可以把二层接口改为三层接口,也就是说相当于一个路由器上的接口。no switch 实际上是no switchport的简写,而switchport就是交换口,也就是二层接口,…

三层交换机与路由器的区别

一、三层交换机 三层交换机就是具有部分路由器功能的交换机,工作在OSI网络标准模型的第三层:网络层。三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多…

交换机和路由器的区别是什么?

交换机和路由器的区别: ◆ 路由器可以给你的局域网自动分配IP,虚拟拨号,就像一个交通警察,指挥着你的电脑该往哪走,你自己不用操心那么多了。 交换机只是用来分配网络数据的。 ◆ 路由器可以把一个IP分配给很多个主机…

网络/交换机和路由器区别

计算机网络往往由许多种不同类型的网络互连连接而成。如果几个计算机网络只是在物理上连接在一起,它们之间并不能进行通信,那么这种“互连”并没有什么实 际意义。因此通常在谈到“互连”时,就已经暗示这些相互连接的计算机是可以进行通信的&…

交换机和路由器

交换机只有交换的功能,用于组建局域网 路由器用来连接外网(局域网和互联网相连接),路由器也叫网关 也就是说路由器是用来连接两个子网,交换机是用来连接一个子网内不同的计算机 路由器是基于ip寻址,交换机…

【交换机和路由器的区别】

一.交换机? 交换机的作用:把数据包发送到正确的位置 交换机工作的方式:依照MAC地址和物理端口的关系映射表,也叫MAC地址表,通过数据包上的目标MAC地址,找到他对应的物理端口. 1.物理端口如何和MAC地址建立映射关系? 通过网线! 一个交换机本身就带有很多端口,每一个端口有自己…

浅谈交换机和路由器的区别

网络在我们的生活学习中已经成为了必须的东西,也许 ”世界上最遥远的距离就是没网“,而路由器和交换机这两种联网的中继设备最常见。如下图左为交换机,右为路由器。那么到底路由器和交换机有哪些区别呢?他们在网络的组建方面各自扮…

交换机与路由器的配置

交换机与路由器的配置 一、交换机的基本配置 配置enable口令、密码和主机名 Switch> (用户执行模式提示符) Switch>enable (进入特权模式) Switch# (特权模式提示符) Switch#config terminal (进入配置模式) Switch(config)#enable password cisco (设置enable passwor…