Matlab 三维阵列中的二维xy切片

Matlab 三维阵列中的二维xy切片,matlab,Matlab,我有一个512*1024*488的网格,(x,y,z)我有下面的脚本来读取数据,然后绘制二维切片的轮廓 %function [rtime,itime,dt,nx,ny,nz,deltax,deltay,rlenz,u,v,w] = Read_vel3d(name) % _________________________________________________________________________ % name; fid = fopen('vel.451000',

我有一个512*1024*488的网格,(x,y,z)我有下面的脚本来读取数据,然后绘制二维切片的轮廓

    %function [rtime,itime,dt,nx,ny,nz,deltax,deltay,rlenz,u,v,w] = Read_vel3d(name)
% _________________________________________________________________________
% name;
fid    = fopen('vel.451000', 'rb');
% fid;
rtime  = fread(fid, 1,          'float64');
itime  = fread(fid, 1,          'int32');
dt     = fread(fid, 1,          'float64');
nx0    = fread(fid, 1,          'int32');
ny0    = fread(fid, 1,          'int32');
nz     = fread(fid, 1,          'int32');
deltax = fread(fid, 1,          'float64');
deltay = fread(fid, 1,          'float64');
rlenz  = fread(fid, 1,          'float64');
utoto  = fread(fid, nx0*ny0*nz, 'float64');
vtoto  = fread(fid, nx0*ny0*nz, 'float64');
wtoto  = fread(fid, nx0*ny0*nz, 'float64');
fclose(fid);

u = reshape(utoto,[nx0,ny0,nz]);
v = reshape(vtoto,[nx0,ny0,nz]);
w = reshape(wtoto,[nx0,ny0,nz]);

nx = nx0-1;
ny = ny0-1;

display('Contour Plot');

A = squeeze(u(138,:,:));
figure
figure('visible','on')
contourf(A);
colormap jet;
hold on
colorbar;
当我这样做的时候,我明白了:

A = squeeze(u(:,:,138));
A = squeeze(u(138,:,:));
它在z方向上创建一个一维,然后绘制数组1024*512,因此在x方向上绘制1024,在y方向上绘制512,这是正确的,但是当我这样做时:

A = squeeze(u(:,:,138));
A = squeeze(u(138,:,:));

它再次在x中创建一个一维,然后绘制数组488*1024,因此在x中绘制488,然后在y中绘制1024,这就是问题所在。在这个切片中,x应该是1024,y应该是488,但我不确定如何做到这一点

从高维数据中获取2D切片的一种方法是,在需要时(根据您对方向的偏好)使用“挤压”将切片转换为建议的注释之一。但是我建议使用permute。permute的优点是,在切片的维度为奇异的罕见情况下,仍然可以获得正确的方向,而“挤压”将挤出奇异维度

无论采用哪种方式,当您从不同维度提取时,都需要以不同的方式进行:

if isDim1 % extract slice from 1st dim
    A = permute(u(138, :, :), [2 3 1]); % could be [3 2 1]
elseif isDim2 % extract slice from 2nd dim
    A = permute(u(:, 138, :), [3 1 2]); % could be [1 3 2]
else % 3rd dim
    A = u(:, :, 138); % could be A = permute(u(:, :, 138), [2 1 3]);
end

是的,这就是它应该做的。如果要交换尺寸,只需转置挤压的结果即可。这就是你要问的吗?是的,这就是我想要的,但是我该如何转换它,这就是让我困惑的地方?我知道对矩阵进行转置,例如u',但我想知道如何对挤压的结果进行转置,以便绘制轮廓二维切片。代码的压缩行后面会跟什么?