Fortran中n维数组的下标含义解读及Matlab等效创建代码
Fortran高维数组规则说明
Fortran采用列优先的数组存储逻辑,数组声明时的下标顺序遵循「最左维度索引变化最快、最右维度索引变化最慢」的规则,默认所有维度的下标起始值为1,开发者也可以通过X(start:end, start:end...)的语法自定义各维度的下标起止范围。
对应你给出的声明示例:
- 4维数组
real(8) X(48,20,7,3):四个维度的长度从左到右依次为48、20、7、3,你可以根据自身业务场景给各维度赋予业务含义(比如第一维对应网格点序号、第二维对应时间步、第三维对应高度层、第四维对应试验组别等),语法层面仅规定存储和索引的顺序规则。 - 3维数组
real(8) Y(48,15,5):三个维度的长度从左到右依次为48、15、5。
举个索引存储的例子:访问X(i,j,k,l)时,i的合法取值范围默认是148,j是120,k是17,l是13。存储时X(1,1,1,1)之后连续存储的是X(2,1,1,1),直到第一维全部存完才会开始存储第二维的下一个索引对应的元素,以此类推,全部前三个维度的元素存完才会更新第四维的索引。
Matlab等效代码
Matlab同样采用列优先存储逻辑,数组维度的定义规则和Fortran完全一致,和你给出的Fortran数组规格完全匹配的创建代码如下:
% 创建双精度4维数组X,维度为48×20×7×3,默认初始值为0 X = zeros(48, 20, 7, 3); % 创建双精度3维数组Y,维度为48×15×5,默认初始值为0 Y = zeros(48, 15, 5);
如果需要全1数组可以把zeros替换为ones,需要未初始化的数组可以替换为nan。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

