ndgridbuild matrices or N-D arrays by replicating some template vectors
Calling Sequence
[X, Y] = ndgrid(x,y)
[X, Y, Z] = ndgrid(x,y,z)
[X, Y, Z, T] = ndgrid(x,y,z,t)
[X1, X2, ..., Xm] = ndgrid(x1,x2,...,xm)
Argumentsx, y, z, ...vectors of any data types. They may have distinct data types.X, Y, Z, ...
matrices in case of 2 input arguments, or hypermatrices otherwise. They all have the same sizes: size(x,"*") rows, size(y,"*") columns, size(z,"*") layers, etc. They have the datatypes of respective input vectors: typeof(X)==typeof(x), typeof(Y)==typeof(y), etc.
Description
The first application of ndgrid is to build a grid of nodes meshing the 2D or 3D or N-D space according to 2, 3, or more sets x, y, etc.. of "template" coordinates sampled along each direction/dimension of the space that you want to mesh.
Hence, the matrix or hypermatrix X is made by replicating the vector x as all its columns ; the matrix or hypermatrix Y is made by replicating the vector y as all its rows ; Z is made of replicating the vector z along all its local thicknesses (3rd dimension); etc.
[X, Y] = ndgrid([1 3 4], [0 2 4 6])
X =
1. 1. 1. 1.
3. 3. 3. 3.
4. 4. 4. 4.
Y =
0. 2. 4. 6.
0. 2. 4. 6.
0. 2. 4. 6.
]]>
Then, the coordinates of the node(i,j) in the 2D space will be simply [x(i), y(j)] now given by [X(i,j), Y(i,j)]. As well, the coordinates of a node(i,j,k) of a 3D grid will be [x(i), y(j), z(k)] now given by [X(i,j,k), Y(i,j,k), Z(i,j,k)].
This replication scheme can be generalized to any number of dimensions, as well to any type of uniform data. Let's for instance consider 2 attributes:
The first is a number, to be chosen from the vector say n= [ 3 7 ]
The second is a letter, to be chosen from the vector say c= ["a" "e" "i" "o" "u" "y"]
Then we want to build the set of all {n,c} possible pairs. It will just be the 2D grid:
[N, C] = ndgrid([3 7],["a" "e" "i" "o" "u" "y"])
C =
!a e i o u y !
!a e i o u y !
N =
3. 3. 3. 3. 3. 3.
7. 7. 7. 7. 7. 7.
]]>
Then, the object(i,j) will have the properties {n(i) c(j)} that now can be addressed with {N(i,j) C(i,j)}. This kind of grid may be useful to initialize an array of structures.
Following examples show how to use X, Y, Z in most frequent applications.
ExamplesExample #1:Example #2:Example #3: Creates a table of digrams: [c1, c2] = ndgrid(["a" "b" "c"], ["a" "b" "c" "d" "e" "f" "g" "h"])
c2 =
!a b c d e f g h !
!a b c d e f g h !
!a b c d e f g h !
c1 =
!a a a a a a a a !
!b b b b b b b b !
!c c c c c c c c !
--> c1+c2
ans =
!aa ab ac ad ae af ag ah !
!ba bb bc bd be bf bg bh !
!ca cb cc cd ce cf cg ch !
]]>See Also
meshgrid
kron
feval
eval3d
nf3d
History6.0Extension to all homogeneous datatypes ([], booleans, encoded integers, polynomials, rationals, strings). Revision of the help page.