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
,而是在这种情况下,网格代表因变量,所以它们不适用。