ndgrid
与えられたベクトルを複製することによって、行列またはN次元配列を作成
呼び出し手順
[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)
引数
- x, 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.
説明
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)] equal to
[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)] equal to
[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"]
--> [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.
例
Example #1:
// Create a simple 2d grid x = linspace(-10,2,40); y = linspace(-5,5,40); [X,Y] = ndgrid(x,y); // Compute ordinates Z(X,Y) on the {X, Y} grid and plot Z(X,Y) Z = X - 3*X.*sin(X).*cos(Y-4) ; clf() plot3d(x,y,Z, flag=[color("green") 2 4], alpha=7, theta=60); show_window()
Example #2:
// 簡単な3次元グリッドを作成 nx = 10; ny = 6; nz = 4; x = linspace(0,2,nx); y = linspace(0,1,ny); z = linspace(0,0.5,nz); [X,Y,Z] = ndgrid(x,y,z); // 3次元グリッドを表示する ... XF=[]; YF=[]; ZF=[]; for k=1:nz [xf,yf,zf] = nf3d(X(:,:,k),Y(:,:,k),Z(:,:,k)); XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf]; end for j=1:ny [xf,yf,zf] = nf3d(matrix(X(:,j,:),[nx,nz]),... matrix(Y(:,j,:),[nx,nz]),... matrix(Z(:,j,:),[nx,nz])); XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf]; end clf() plot3d(XF,YF,ZF, flag=[0 6 3], 66, 61, leg="X@Y@Z") xtitle("A 3d grid !"); show_window()
Example #3: Create a table of digrams:
[c1, c2] = ndgrid(["a" "b" "c"], ["a" "b" "c" "d" "e" "f" "g" "h"]) c1+c2
--> [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 !
参照
履歴
| バージョン | 記述 |
| 6.0 | Extension to all homogeneous datatypes ([], booleans, encoded integers, polynomials, rationals, strings). Revision of the help page. |
Comments
Add a comment:
Please login to comment this page.