首先,一些背景知识:作为更大代码的一部分,我正在从 netCDF 输入文件中读取数据。我事先制作了这个输入文件。已编写代码以期望项 F 是一个数组,形状类似于 t-by-x-by-y-by-z,其中时间 t 通常具有大约 20 个值,并且 x 和 y 维度通常为 1000 个条目每个和 z 通常有大约 5。
综上所述,F 是一个 20x1000x1000x5 的数组。
这种格式阅读起来非常慢。如果以 x-by-y-by-z-by-t 格式写入,读取速度会快很多倍。
那么我现在正在生成一个包含 Fnew 的输入 netCDF 文件,它是一个 1000x1000x5x20 数组。
现在我的问题是:我想对较大的代码进行尽可能少的更改,因此在读入 Fnew 后,我立即想重新排列它以匹配 F。
必须有一个简单的解决方案吗?
正如 Cris Luengo 评论的那样,置换函数正是您所需要的。这是您在上下文中使用它的方式:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句