meshgrid 订阅
meshgrid是MATLAB(一款应用软件)中用于生成网格采样点的函数。在使用MATLAB进行3D图形绘制方面有着广泛的应用。 展开全文
meshgrid是MATLAB(一款应用软件)中用于生成网格采样点的函数。在使用MATLAB进行3D图形绘制方面有着广泛的应用。
信息
应    用
3D图形绘制
外文名
meshgrid
实    质
网格采样点的函数
软    件
MATLAB
meshgrid函数简介
生成绘制3D图形所需的网格数据。在计算机中进行绘图操作时, 往往需要一些采样点,然后根据这些采样点来绘制出整个图形。在进行3D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x, y)例如, 要在“3<=x<=5,6<=y<=9,z不限制区间” 这个区域内绘制一个3D图形,如果只需要整数坐标为采样点的话。我们可能需要下面这样一个坐标构成的矩阵:(3,9),(4,9),(5,9);(3,8),(4,8),(5,8);(3,7),(4,7),(5,7);(3,6),(4,6),(5,6);在matlab中我们可以这样描述这个坐标矩阵:把各个点的x坐标独立出来,得:3,4,5;3,4,5;3,4,5;3,4,5;再把各个点的y坐标也独立出来:9,9,9;8,8,8;7,7,7;6,6,6;这样对应的x、y结合,便表示了上面的坐标矩阵。meshgrid就是产生这样两个矩阵,来简化我们的操作。然后根据(x, y)计算获得z,并绘制出三维图形。在Matlab命令窗口中键入type meshgrid可以查看该函数的源代码(由此可以理解meshgrid的算法思想), 键入doc meshgrid或者help meshgrid可以获得帮助文档。[X,Y] = meshgrid(x,y)解释:输出X的每一行的数值都是复制的x的值;输出Y的每一列的数值都是复制的y的值。[X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的[X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三变量的函数和绘制三维立体图相关函数: plot3、mesh、surf、automesh、ndgridfunction [xx,yy,zz] = meshgrid(x,y,z)  %MESHGRID Cartesian grid in 2-D/3-D space  % [X,Y] = MESHGRID(xgv,ygv) replicates the grid vectors xgv and ygv to   % produce the coordinates of a rectangular grid (X, Y). The grid vector  % xgv is replicated numel(ygv) times to form the columns of X. The grid   % vector ygv is replicated numel(xgv) times to form the rows of Y.  %  % [X,Y,Z] = MESHGRID(xgv,ygv,zgv) replicates the grid vectors xgv, ygv, zgv   % to produce the coordinates of a 3D rectangular grid (X, Y, Z). The grid   % vectors xgv,ygv,zgv form the columns of X, rows of Y, and pages of Z   % respectively. (X,Y,Z) are of size numel(ygv)-by-numel(xgv)-by(numel(zgv).  %  % [X,Y] = MESHGRID(gv) is equivalent to [X,Y] = MESHGRID(gv,gv).  % [X,Y,Z] = MESHGRID(gv) is equivalent to [X,Y,Z] = MESHGRID(gv,gv,gv).  %  % The coordinate arrays are typically used for the evaluation of functions   % of two or three variables and for surface and volumetric plots.  %  % MESHGRID and NDGRID are similar, though MESHGRID is restricted to 2-D   % and 3-D while NDGRID supports 1-D to N-D. In 2-D and 3-D the coordinates   % output by each function are the same, the difference is the shape of the   % output arrays. For grid vectors xgv, ygv and zgv of length M, N and P   % respectively, NDGRID(xgv, ygv) will output arrays of size M-by-N while   % MESHGRID(xgv, ygv) outputs arrays of size N-by-M. Similarly,   % NDGRID(xgv, ygv, zgv) will output arrays of size M-by-N-by-P while   % MESHGRID(xgv, ygv, zgv) outputs arrays of size N-by-M-by-P.   %  % Example: Evaluate the function x*exp(-x^2-y^2)   % over the range -2 < x < 2, -4 < y < 4,  %  % [X,Y] = meshgrid(-2:.2:2, -4:.4:4);  % Z = X .* exp(-X.^2 - Y.^2);  % surf(X,Y,Z)  %  %  % Class support for inputs xgv,ygv,zgv:  % float: double, single  % integer: uint8, int8, uint16, int16, uint32, int32, uint64, int64  %  % See also SURF, SLICE, NDGRID.% Copyright 1984-2013 The MathWorks, Inc.if nargin==0 || (nargin > 1 && nargout > nargin)  error(message('MATLAB:meshgrid:NotEnoughInputs'));  endif nargin == 2 || (nargin == 1 && nargout < 3) % 2-D array case  if nargin == 1  y = x;  end  if isempty(x) || isempty(y)  xx = zeros(0,class(x));  yy = zeros(0,class(y));  else  xrow = full(x(:)).'; % Make sure x is a full row vector.  ycol = full(y(:)); % Make sure y is a full column vector.  xx = repmat(xrow,size(ycol));  yy = repmat(ycol,size(xrow));  end  else % 3-D array case  if nargin == 1  y = x;  z = x;  end  if isempty(x) || isempty(y) || isempty(z)  xx = zeros(0,class(x));  yy = zeros(0,class(y));  zz = zeros(0,class(z));  else  nx = numel(x);  ny = numel(y);  nz = numel(z);  xx = reshape(full(x),[1 nx 1]); % Make sure x is a full row vector.  yy = reshape(full(y),[ny 1 1]); % Make sure y is a full column vector.  zz = reshape(full(z),[1 1 nz]); % Make sure z is a full page vector.  xx = repmat(xx, ny, 1, nz);  yy = repmat(yy, 1, nx, nz);  zz = repmat(zz, ny, nx, 1);  end  end
收起全文
精华内容
下载资源
问答
  • meshgrid
    2020-01-05 09:56:01

    文章目录


    meshgrid :二维和三维网格

    语法

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

    说明

    [X,Y] = meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。

    [X,Y] = meshgrid(x) 与 [X,Y] = meshgrid(x,x) 相同,并返回网格大小为 length(x)×length(x) 的方形网格坐标。

    [X,Y,Z] = meshgrid(x,y,z) 返回由向量 x、y 和 z 定义的三维网格坐标。X、Y 和 Z 表示的网格的大小为 length(y)×length(x)×length(z)。

    [X,Y,Z] = meshgrid(x) 与 [X,Y,Z] = meshgrid(x,x,x) 相同,并返回网格大小为 length(x)×length(x)×length(x) 的三维网格坐标。

    x = 1:3;
    y = 1:5;
    [X,Y] = meshgrid(x,y)
    
    X = 5×3
    
         1     2     3
         1     2     3
         1     2     3
         1     2     3
         1     2     3
    
    Y = 5×3
    
         1     1     1
         2     2     2
         3     3     3
         4     4     4
         5     5     5
    
    更多相关内容
  • 一句话解释numpy.meshgrid()——生成网格点坐标矩阵。 关键词:网格点,坐标矩阵 网格点是什么?坐标矩阵又是什么鬼? 看个图就明白了: 图中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵,就是坐标矩阵...
  • Python中numpy库中,X,Y = np.meshgrid(x,y)最详细理解(附理解代码) 一. 导入numpy库 import numpy as np 二. 生成X,Y = np.meshgrid(x,y)并详解 N = 3 M=7 #生成两个一维矩阵 x = np.linspace(-2, 2, N) #[-2 0 ...
  • 本文的目的是记录meshgrid()的理解过程: step1. 通过一个示例引入创建网格点矩阵; step2. 基于步骤1,说明meshgrid()的作用; step3. 详细解读meshgrid()的官网定义; 说明:step1和2 的数据都是基于笛卡尔坐标系的矩阵...
  • 动机来自于 meshgrid 矩阵与以列向量矩阵作为参数的向量函数的不兼容。 有以下三种表现形式: 1) 域(即一个 N 维矩形域), 2)meshgrid矩阵(例如,冲浪需要的X,Y)和3) 列向量矩阵(即 [v1, v2, ..., vM] 其中...
  • 将matlab 中自带的meshgrid函数进行解读,并代码转换,实现在VS环境下对meshgrid函数的使用
  • 绘制一个 3 维网格,表示函数 meshgrid(X,Y,Z) 返回的网格,其中 X、Y 和 Z 表示 3 轴方向中的每一个方向的步长
  • 类似于pcolor,无需使用meshgrid,并带有阴影插值
  • "imfilter(img,fspecial('log', floor(6*sigma+1), sigma),'replicate') "; 和meshgrid()使用C/C++实现。
  • http://simulations.narod.ru/ 线: z=z.^2+c; 向量化百分比使其矢量化,即对于每个点,它同时计算迭代以检测无穷大,无穷大是数字,然后按绝对值磨碎 R。
  • np.meshgrid()

    千次阅读 2020-12-06 14:59:22
    1.meshgrid函数介绍 2.meshgrid函数官方说明 3.np.newaxis介绍 4.np.flatten介绍

    1.meshgrid函数介绍

    参数:
    *xi,也就是x1,x2,…,xn :表示网格坐标的一维数组。
    copy:默认为True,如果为False,就返回原始数组以节省内存。
    sparse:默认值为False如果为True,则返回一个稀疏网格以节省内存。
    indexing:输出的笛卡尔(默认为“ xy”)或矩阵(“ ij”)索引。(后面有例子介绍该参数)

    return :返回网格坐标矩阵(返回值为list,list中包含各个方向的坐标矩阵)

    看到这可能还不是很理解,举个例子就很明白了,如下图所示,下图二维平面中有6个网格坐标,可以看出他们的横坐标为[0, 1, 2],纵坐标为[0, 1],倘若只知道他们的横坐标和纵坐标的一维数组,怎么构建这6个网格坐标,meshgrid的作用就是这个。
    在这里插入图片描述

    >>> a = [0, 1, 2]
    >>> b = [0, 1]
    >>> np.meshgrid(a,b)
    [array([[0, 1, 2],[0, 1, 2]]), array([[0, 0, 0],[1, 1, 1]])]
    >>>
    

    返回的结果现在还不是6个点的坐标,但是将a中的元素与b中的每个元素一一对应就得到了上述6个点的坐标。

    那么indexing的作用是什么呢?

    >>> np.meshgrid(a,b,indexing = 'ij')
    [array([[0, 0], [1, 1],[2, 2]]), array([[0, 1],[0, 1], [0, 1]])]
    >>>
    

    也就是若indexing = ‘xy’,返回的矩阵形状为(N2, N1, N3,…Nn),其中Ni = len(xi)。若indexing = ‘ij’,则返回的矩阵形状为(N1, N2, N3,…Nn)。具体的影响就是处理数据时,读取数据方式不同。

     xv, yv = np.meshgrid(x, y, sparse=False, indexing='ij')
            for i in range(nx):
                for j in range(ny):
                    # treat xv[i,j], yv[i,j]
    
            xv, yv = np.meshgrid(x, y, sparse=False, indexing='xy')
            for i in range(nx):
                for j in range(ny):
                    # treat xv[j,i], yv[j,i]
    

    sparse为True时,返回稀疏的网格(为了节省内存),也就是该坐标矩阵下的元素有哪些(由于每行/列下的元素都一样,所以返回一行或一列就可以知道该坐标矩阵下的元素)。

    >>> x = np.meshgrid(a,b,sparse= True)
    >>> x
    [array([[0, 1, 2]]), array([[0],
           [1]])]
    >>>
    

    接下来把meshgrid的结果变为最终的坐标点

    >>> a = [0, 1, 2]
    >>> b = [0, 1]
    >>> np.meshgrid(a,b)
    [array([[0, 1, 2],[0, 1, 2]]), array([[0, 0, 0],[1, 1, 1]])]
    >>> x, y = np.meshgrid(a,b)
    >>> x.flatten()[:, np.newaxis]
    array([[0],
           [1],
           [2],
           [0],
           [1],
           [2]])
    >>> y.flatten()[:, np.newaxis]
    array([[0],
           [0],
           [0],
           [1],
           [1],
           [1]])
    >>> xx = x.flatten()[:, np.newaxis]
    >>> yy = y.flatten()[:, np.newaxis]
    >>> np.c_[xx, yy]
    array([[0, 0],
           [1, 0],
           [2, 0],
           [0, 1],
           [1, 1],
           [2, 1]])
    >>>
    

    np.newaxis介绍:可以在数组索引中使用np.newaxis对象添加大小为1的新尺寸,如:

    >>> a.shape
    (5, 7)
    >>> a[:,np.newaxis,:].shape
    (5, 1, 7)
    
    >>> x = np.arange(5)
    >>> x[:, np.newaxis]
    array([[0],
           [1],
           [2],
           [3],
           [4]])
    >>>
    

    np.flatten()介绍:
    原型声明:def flatten(self, order='C'):

    Parameters
    order{‘C’, ‘F’, ‘A’, ‘K’}, optional
    “ C”表示按行优先(C样式)的顺序展平。“ F”表示按列主(Fortran样式)的顺序展平。“ A”表示如果a在内存中是连续的,则按列优先顺序进行展平;否则,按行优先进行展平。“ K”表示按元素在内存中出现的顺序展平 。默认值为“ C”。
    Returns
    返回展平为一维的数组副本。


    2.meshgrid函数官方说明

    meshgrid的官方api

    def meshgrid(*xi, copy=True, sparse=False, indexing='xy'):
        """
        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.
    
        .. versionchanged:: 1.9
           1-D and 0-D cases are allowed.
    
        Parameters
        ----------
        x1, x2,..., xn : array_like
            1-D arrays representing the coordinates of a grid.
        indexing : {'xy', 'ij'}, optional
            Cartesian ('xy', default) or matrix ('ij') indexing of output.
            See Notes for more details.
    
            .. versionadded:: 1.7.0
        sparse : bool, optional
            If True a sparse grid is returned in order to conserve memory.
            Default is False.
    
            .. versionadded:: 1.7.0
        copy : bool, optional
            If False, a view into the original arrays are returned in order to
            conserve memory.  Default is True.  Please note that
            ``sparse=False, copy=False`` will likely return non-contiguous
            arrays.  Furthermore, more than one element of a broadcast array
            may refer to a single memory location.  If you need to write to the
            arrays, make copies first.
    
            .. versionadded:: 1.7.0
    
        Returns
        -------
        X1, X2,..., XN : ndarray
            For vectors `x1`, `x2`,..., 'xn' with lengths ``Ni=len(xi)`` ,
            return ``(N1, N2, N3,...Nn)`` shaped arrays if indexing='ij'
            or ``(N2, N1, N3,...Nn)`` shaped arrays if indexing='xy'
            with the elements of `xi` repeated to fill the matrix along
            the first dimension for `x1`, the second for `x2` and so on.
    
        Notes
        -----
        This function supports both indexing conventions through the indexing
        keyword argument.  Giving the string 'ij' returns a meshgrid with
        matrix indexing, while 'xy' returns a meshgrid with Cartesian indexing.
        In the 2-D case with inputs of length M and N, the outputs are of shape
        (N, M) for 'xy' indexing and (M, N) for 'ij' indexing.  In the 3-D case
        with inputs of length M, N and P, outputs are of shape (N, M, P) for
        'xy' indexing and (M, N, P) for 'ij' indexing.  The difference is
        illustrated by the following code snippet::
    
            xv, yv = np.meshgrid(x, y, sparse=False, indexing='ij')
            for i in range(nx):
                for j in range(ny):
                    # treat xv[i,j], yv[i,j]
    
            xv, yv = np.meshgrid(x, y, sparse=False, indexing='xy')
            for i in range(nx):
                for j in range(ny):
                    # treat xv[j,i], yv[j,i]
    
        In the 1-D and 0-D case, the indexing and sparse keywords have no effect.
    
        See Also
        --------
        index_tricks.mgrid : Construct a multi-dimensional "meshgrid"
                         using indexing notation.
        index_tricks.ogrid : Construct an open multi-dimensional "meshgrid"
                         using indexing notation.
    
        Examples
        --------
        >>> nx, ny = (3, 2)
        >>> x = np.linspace(0, 1, nx)
        >>> y = np.linspace(0, 1, ny)
        >>> xv, yv = np.meshgrid(x, y)
        >>> xv
        array([[0. , 0.5, 1. ],
               [0. , 0.5, 1. ]])
        >>> yv
        array([[0.,  0.,  0.],
               [1.,  1.,  1.]])
        >>> xv, yv = np.meshgrid(x, y, sparse=True)  # make sparse output arrays
        >>> xv
        array([[0. ,  0.5,  1. ]])
        >>> yv
        array([[0.],
               [1.]])
    
        `meshgrid` is very useful to evaluate functions on a grid.
    
        >>> import matplotlib.pyplot as plt
        >>> x = np.arange(-5, 5, 0.1)
        >>> y = np.arange(-5, 5, 0.1)
        >>> xx, yy = np.meshgrid(x, y, sparse=True)
        >>> z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
        >>> h = plt.contourf(x,y,z)
        >>> plt.show()
    
        """
    
    展开全文
  • meshgrid(*xi, **kwargs) 功能:从一个坐标向量中返回一个坐标矩阵 参数: x1,x2…,xn:数组,一维的数组代表网格的坐标。 indexing:{‘xy’,’ij’},笛卡尔坐标’xy’或矩阵’ij’下标作为输出,默认的是笛卡尔...
  • Meshgrid用法

    2022-03-09 17:33:27
    Matlab meshgrid 三维曲面 三维网格面

    在matlab绘制三维曲面图或三维网格图时经常会用到meshgrid指令

    比如:通常在确定向量x,y的基础上,使用meshgrid生成新的矩阵数据[X,Y],再输入函数Z=f(X,Y),最后使用mesh或surf命令生成三维网格图或三维曲面图。

    那么meshgrid指令究竟是什么意思呢?

    比如向量x=[1,2,3],向量y=[4,5],[X,Y]=meshgrid指令的作用是分别产生两个1、以向量x为行,向量y为列的矩阵2、并且向量x的长度为新矩阵的列数,y的长度为新矩阵的行数 的新矩阵X和Y.
    在这里即为两行三列。所以:
    X=
    1 2 3
    1 2 3

    Y=
    4 4 4
    5 5 5

     x=[1,2,3];
    y=[4,5];
    [X,Y]=meshgrid(x,y)
    

    在这里插入图片描述

    [X,Y]即为矩阵X和矩阵Y合在一起:
    在这里插入图片描述

    再换一例:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 此函数可轻松绘制在计算域中生成并转换到物理域的二维网格。 它允许在 x 和 y 方向上拉伸网格点。
  • 目录背景本博文主要分析 ndgrid, meshgrid是附送的,都是类似的东西,学会了一个,另一个很容易就理解了。为什么会对 ndgrid 感兴趣呢?因为对它的不理解,导致我少写了几篇博文,最后,决定将 ndgrid 总结一番,...

    目录

    背景

    本博文主要分析 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源创计划”,欢迎正在阅读的你也加入,一起分享。

    展开全文
  • numpy meshgrid顺序问题

    2021-08-02 16:24:22
    在 [1] 中,当生成 (x, y) 位置时,用到 numpy.meshgrid。最初写的是: xx, yy = np.meshgrid(x, y) 但到实际使用时,发现这会使得图像中 x 和 y 调转了,应该反过来才对。 Problem 在 [1] 中,由于 bar3d 传入的...
  • numpy.meshgrid()理解

    万次阅读 多人点赞 2018-08-09 14:18:51
    一句话解释numpy.meshgrid()——生成网格点坐标矩阵。 关键词:网格点,坐标矩阵 网格点是什么?坐标矩阵又是什么鬼? 我先问个问题:这张图你会生成吗? ...
  • 一、Meshgrid函数 import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 1, 5) y = np.linspace(0, 1, 3) print("x = ", x) print("-" * 50) print("y = ", y) print("-" * 100) X, Y = np....
  • 今天在看点目标成像仿真程序的时候,看到了meshgrid函数,看了matlab的帮助文档后理解了一点,特此记录学习过程。 目录一、meshgrid函数二、举例验证三、创建二维网格绘制曲面图四、总结五、meshgrid函数源代码(仅...
  • np.meshgrid()函数常用于生成二维网格,比如图像的坐标点。pytorch中也有一个类似的函数torch.meshgrid(),功能也类似,但是两者的用法有区别,使用时需要注意(刚踩坑,因此记录一下。。。)比如我要生成一张图像(h=6...
  • OpenCV基本操作meshgrid

    2022-03-03 10:51:10
    xyNet=np.meshgrid(xAfter,yAfter) #实际上,xyNet返回的每个维度为: ‘’‘每行每列,对应的x值 [[ 0 0 0 … 0 0 0] [ 0 0 0 … 0 0 0] [ 0 0 0 … 0 0 0] … [99 99 99 … 99 99 99] [99 99 99 … 99 99 99] [99...
  • gridx,gridy=np.meshgrid(a,b) print('gridx=\n',gridx) print('gridy=\n',gridy) x=torch.tensor(a) y=torch.tensor(b) gridx, gridy =torch.meshgrid(x,y) print('gridx=\n', gridx) print('gridy=\n', gridy) ...
  • torch.meshgrid

    2022-02-12 21:12:28
    torch.meshgrid(*tensors) ``` 这个是干嘛的?根据输入来创建网格的,例如你告诉我两个列表[1,2],[3],我们可以在二维直角坐标系上标上两个点(1,3),(2,3)。从我们学过的数学的角度来说,前面那个就是x定义域,后面...
  • 备注: 这些内容是我在阅读了meshgrid源代码及看了http://zhidao.baidu.com/question/169889793.html?an=0&si=1这个帖子之后的总结。函数功能:生成绘制3-D图形所需的网格数据。在计算机中进行绘图操作时,往往...
  • Python语言Numpy包之Meshgrid 函数

    千次阅读 2021-12-04 23:43:20
    1 Meshgrid 函数的基本用法 在 Numpy 的官方文章里,meshgrid 函数的英文描述也显得文绉绉的,理解起来有些难度。可以这么理解, meshgrid 函数用两个坐标轴上的点在平面上画网格。 用法:  [X,Y]=meshgrid(x,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,522
精华内容 11,808
关键字:

meshgrid

友情链接: NewCoders.zip