在matlab中将矩形网格转换为数组

时间:2017-08-23 23:27:49

标签: matlab

我正在使用ndgrid来创建一系列矩形网格。例如:

nx = [1 2 3];
ny = [4 5 6];
nz = [7 8 9];

[x_mesh, y_mesh, z_mesh] = ndgrid(nx, ny, nz);

有没有一种简单的方法可以将矩形网格的坐标转换为NxM数组(在本例中为27x3)?结果应如下所示:

[1,4,7;
 1,4,8;
 1,4,9;
 1,5,7;
 1,5,8;
 1,5,9;
 1,6,7;
 1,6,8;
 1,6,9;
 ...
 3,6,7;
 3,6,8;
 3,6,9]

如果可能的话,我想指定编译数组中坐标的方向。例如,上面沿z移动,然后是y,然后是x。如果可以指定以x,然后y,然后z的顺序移动,那将是很好的。

1 个答案:

答案 0 :(得分:2)

以下代码为您提供了所描述的数组。

nx = [1 2 3];
ny = [4 5 6];
nz = [7 8 9];

[x_mesh, y_mesh, z_mesh] = ndgrid(nx, ny, nz);

grid = reshape(permute([x_mesh; y_mesh; z_mesh],[3 2 1]),[],3);

首先迭代x,然后y,然后z,你可以使用

grid = [x_mesh(:) y_mesh(:) z_mesh(:)]

可以直接控制迭代次序的通用解决方案是

order = [1 3 2];
grid = reshape(permute(cat(4,x_mesh,y_mesh,z_mesh),[order 4]),[],3)

首先在x上迭代,然后是z,然后是y。