在matlab中重新排序数组维度

首先,一些背景知识:作为更大代码的一部分,我正在从 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。

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

SG1234

正如 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章