Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中矩形网格到阵列的转换_Matlab - Fatal编程技术网

matlab中矩形网格到阵列的转换

matlab中矩形网格到阵列的转换,matlab,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;

我正在使用
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的顺序移动,那就太好了。

下面的代码给出了您描述的数组

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上迭代。

我正要回来对排序进行评论,但后来看到您更新了答案。这个很好用!伟大的解决方案!可能值得提出另一个问题,但如果数组中有一系列值,并且知道顺序,那么将这些数组值放入网格的机制是什么?或者换句话说,当
nx
ny
nz
不一致时,执行此相反操作。我必须考虑通用解决方案,但如果使用x-y-z顺序(第二个表达式),则只需执行
x_网格=重塑(网格(:,1),[numel(nx),numel(ny),numel(nz)]网格
中的第2列和第3列对
y_网格
z_网格
进行编码>和类似操作。如果您不知道
nx
ny
nz
,您可以使用
nx=unique(网格(:,1))获取它们(可能是无序的);ny=唯一(网格(:,2));nz=唯一(网格(:,3))啊,是的,嗯。。。这使得我的应用程序从
网格
x_网格
y_网格
,和
z_网格
,这并不是因为我不知道
nx
ny
nz
,而是在这种情况下,网格代表因变量,所以它们不适用。