使用向量索引多维Fortran数组

Aan*_*ant 11 arrays fortran

现代Fortran中是否有可能使用向量来索引多维数组?也就是说,给予,

integer, dimension(3) :: index = [4,6,9]
double precision, dimension(10,10,10) :: data
Run Code Online (Sandbox Code Playgroud)

是否有data(4,6,9)比写作更好(更一般)的访问方式data(index(1), index(2), index(3))?不必硬编码data数组的等级就好了.

(天真我想写,data(index)但当然这实际上意味着不同的东西 - 子集"聚集" - 要求data自己成为排名第一的阵列.)

对于它的价值,这基本上与JavaScript中的索引数组的多维索引相同,但在Fortran中.不幸的是,那里的聪明答案不适用于预定义的数组排名.

Hig*_*ark 11

号和所有我能想到的解决方法是可怕的黑客,你最好写一个函数采取dataindex作为参数,并吐出你想要的元素(一个或多个).

但是,您可以使用现代Fortran的数组排名重新映射功能来完全相反,这可能会满足您对数组排名快速和宽松的愿望.

鉴于声明

double precision, dimension(1000), target :: data
Run Code Online (Sandbox Code Playgroud)

你可以定义一个rank-3指针

double precision, pointer :: index_3d(:,:,:)
Run Code Online (Sandbox Code Playgroud)

然后像这样设置:

index_3d(1:10,1:10,1:10) => data
Run Code Online (Sandbox Code Playgroud)

你可以现在使用rank-3和rank-1指数data,这与你想做的很接近.我还没有在愤怒中使用它,但是几个简单的测试没有发现任何严重的问题.