目录

背景

一维空间中的矩形网格:

二维空间中的矩形网格:

三维空间中的矩形网格:

语法对比

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

2、插入数据


背景

本博文主要分析 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 的数组。

https://blog.csdn.net/u012183487/article/details/76149279

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


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

一维空间中的矩形网格:

>> a = -3:3a =-3    -2    -1     0     1     2     3>> x = ndgrid(a)x =-3-2-10123

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


二维空间中的矩形网格:

>> a = -3:3a =-3    -2    -1     0     1     2     3>> b = -2:2b =-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    -10     0     0     0     01     1     1     1     12     2     2     2     23     3     3     3     3y =-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

从工作空间可以看到,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     3y1 =-2    -2    -2    -2    -2    -2    -2-1    -1    -1    -1    -1    -1    -10     0     0     0     0     0     01     1     1     1     1     1     12     2     2     2     2     2     2

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

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


三维空间中的矩形网格:

>> a = -3:3a =-3    -2    -1     0     1     2     3>> b=-2:2b =-2    -1     0     1     2>> c=-1:1c =-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    -10     0     0     0     01     1     1     1     12     2     2     2     23     3     3     3     3x(:,:,2) =-3    -3    -3    -3    -3-2    -2    -2    -2    -2-1    -1    -1    -1    -10     0     0     0     01     1     1     1     12     2     2     2     23     3     3     3     3x(:,:,3) =-3    -3    -3    -3    -3-2    -2    -2    -2    -2-1    -1    -1    -1    -10     0     0     0     01     1     1     1     12     2     2     2     23     3     3     3     3y(:,:,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     2y(:,:,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     2y(:,:,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     2z(:,:,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    -1z(:,:,2) =0     0     0     0     00     0     0     0     00     0     0     0     00     0     0     0     00     0     0     0     00     0     0     0     00     0     0     0     0z(:,:,3) =1     1     1     1     11     1     1     1     11     1     1     1     11     1     1     1     11     1     1     1     11     1     1     1     11     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     3x1(:,:,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     3x1(:,:,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     3y1(:,:,1) =-2    -2    -2    -2    -2    -2    -2-1    -1    -1    -1    -1    -1    -10     0     0     0     0     0     01     1     1     1     1     1     12     2     2     2     2     2     2y1(:,:,2) =-2    -2    -2    -2    -2    -2    -2-1    -1    -1    -1    -1    -1    -10     0     0     0     0     0     01     1     1     1     1     1     12     2     2     2     2     2     2y1(:,:,3) =-2    -2    -2    -2    -2    -2    -2-1    -1    -1    -1    -1    -1    -10     0     0     0     0     0     01     1     1     1     1     1     12     2     2     2     2     2     2z1(:,:,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    -1z1(:,:,2) =0     0     0     0     0     0     00     0     0     0     0     0     00     0     0     0     0     0     00     0     0     0     0     0     00     0     0     0     0     0     0z1(:,:,3) =1     1     1     1     1     1     11     1     1     1     1     1     11     1     1     1     1     1     11     1     1     1     1     1     11     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:2a =-2    -1     0     1     2>> [x1,x2] = ndgrid(a);
>> [x1,x2] = ndgrid(a)x1 =-2    -2    -2    -2    -2-1    -1    -1    -1    -10     0     0     0     01     1     1     1     12     2     2     2     2x2 =-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、在网格域上计算函数:

% Evaluate Function Over Gridded Domainclear
clc
close all[X1,X2] = ndgrid(-2:.2:2);Z = X1 .* exp(-X1.^2 - X2.^2);mesh(X1,X2,Z)


2、插入数据

%interpolate dataclear
clc
close all[X,Y] = ndgrid(-5:0.5:5);f = sin(X.^2) * cos(Y.^2);surf(X,Y,f)

%interpolate dataclear
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)

参考链接:帮助文档

【 MATLAB 】ndgrid 和 meshgrid 对比理解以及应用相关推荐

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

    目录 背景 本博文主要分析 ndgrid, meshgrid是附送的,都是类似的东西,学会了一个,另一个很容易就理解了. 为什么会对 ndgrid 感兴趣呢?因为对它的不理解,导致我少写了几篇博文,最 ...

  2. C++函数与java函数菜鸟级的对比理解

    C++函数与java函数菜鸟级的对比理解 转自:http://blog.csdn.net/stevenhu_223/article/details/9108571 Android源码底层的代码实现文件 ...

  3. 使用Pysot和MATLAB目标跟踪画对比图,标注框

    使用Pysot和MATLAB目标跟踪画对比图,标注框 python画图点会掉,MATLAB点会涨,具体什么原因,我也不知道!!! 最近也是在画图,搞了很久.翻了很多博客,才弄好.哈哈,在很多博客留下了 ...

  4. Matlab中的meshgrid函数

    参考: https://blog.csdn.net/hhhhhyyyyy8/article/details/76209094 matlab函数手册 meshgrid是Matlab中用于生成网络采样点的 ...

  5. MATLAB中的函数句柄 理解

    MATLAB中的函数句柄 理解 https://zhuanlan.zhihu.com/p/266263265 https://blog.csdn.net/kevinhg/article/details ...

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

    ------------------------------------------------------------------  meshgrid 函数用来生成网格矩阵,可以是二维网格矩阵. e ...

  7. 进程 线程 协程_进程 线程 协程 管程 纤程 概念对比理解

    不知道是不是我自己本身就有那么一丝丝的密集恐惧,把这么一大堆看起来很相似很相关的概念放在一起,看起来是有点麻,捋一捋感觉舒服多了. 相关概念 任务.作业(Job,Task,Schedule) 在进程的 ...

  8. 经验之谈,关于HOG调参:对matlab和opencv作对比

    笔者曾经做过一个项目,后期是把matlab转化为opencv,在此过程中,遇到的比较大的问题是HOG特征的提取问题,由于两个不用语言写的函数其输入参数的格式和编程思想有较多不同,在调试过程中花费了较多 ...

  9. matlab和c 对比,matlab与c的对比研究

    .RESET SESSION DELVAR, A Purpose π 180/π ≈ 57.2958 ∞ Not a number Matlab inf NaN A = [1,2,3] B = [4, ...

最新文章

  1. 标注工具_语料标注工具(2)
  2. React 是怎样炼成的
  3. java eden space_JVM虚拟机20:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)...
  4. 多媒体个人计算机软件系统,HP推出新的多媒体个人计算机
  5. 简单的c++人脸识别源代码
  6. ArcPy常用基础功能
  7. python属于低级语言还是高级语言,【单选题】Python语言属于 A. 机器语言 B. 汇编语言 C. 高级语言 D. 科学计算语言...
  8. qq网吧弹框如何去掉?如何删掉NetBar文件夹?
  9. 西安电子科技大学计算机学院评论,西电高琳教授团队在Science子刊及领域著名期刊发表成果...
  10. vue制作导航栏html,Vue实现导航栏菜单
  11. Introduction to Wireless LAN Measurements From 802.11a to 802. 11 ac
  12. 汽车修理厂计算机管理,最新汽车维修厂管理系统
  13. 硬件设备使用网线连接PC并访问外网
  14. 奇数位升序偶数位降序链表排序
  15. asp.net(c#)中IsPostBack是什么意思
  16. 【CSharp】延迟初始化(Lazy)
  17. 今日头条推广精品栏助力场景破壁
  18. 为什么嫁人要嫁IT男?
  19. EBS 打印机设置——PASTA
  20. 越狱 第四季(1-3)

热门文章

  1. c/c++/MFC 调用 js 函数代码
  2. 解决Linux中文乱码
  3. 高性能云计算展望(中)
  4. python的六大数据类型中可以改变的数据类型为_Python中数据类型转换
  5. 无密码进去mysql_技术分享 | 安全地无密码登录 MySQL
  6. Linux下rgmii接口,zynq7010 petalinux 2019.2 RGMII via EMIO 连接问题
  7. APRILTAG 标准图片:TAG25H9
  8. CSDN 中秋节日礼品盒 | 中秋节快乐
  9. Arduino门禁人机接口调试 Version 1.0
  10. 带你认识清华标杆课教师 | 卓晴:自带BGM的硬核“技术流”教师