在matlab中重新排序数组维度



首先,一些背景:作为更大代码的一部分,我正在从netCDF输入文件中读取数据。我事先生成了这个输入文件。该代码已经被编写为期望项F,该项F是形状类似t-by-x-by-by-z的阵列,其中时间t通常具有大约20个值,并且x和y维度通常为每个1000个条目的数量级,并且z通常具有大约5个条目。

总之,F是一个20x1000x1000x5的阵列。

这种格式读起来非常慢。如果它是以x-by-y-z-by-t的格式编写的,那么读取速度会快很多倍。

因此,我现在正在生成一个包含Fnew的输入netCDF文件,它是一个1000x1000x5x20数组。

现在我的问题是:我想对较大的代码进行尽可能少的更改,所以在读取Fnew后,我立即想重新排列它以匹配F.

必须有一个简单的解决方案?

正如Cris Luengo所评论的,permute函数正是您所需要的。这就是你在你的环境中使用它的方式:

function test()
%% instead of the current (using 10 instead of 1000 just for demo purposes):
txyz = rand(20,10,10,5);
largerCodeOld(txyz);
%% you can now use:
xyzt = rand(10,10,5,20);
largerCodeNew( xyzt );
end
function largerCodeOld(txyz)
% do stuff with txyz
end
function largerCodeNew(xyzt)
txyz = permute(xyzt,[ 4, 1:3 ]);
% either do stuff with txyz
% or call largerCodeOld( txyz )
end

相关内容

  • 没有找到相关文章

最新更新