现代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
号和所有我能想到的解决方法是可怕的黑客,你最好写一个函数采取data和index作为参数,并吐出你想要的元素(一个或多个).
但是,您可以使用现代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,这与你想做的很接近.我还没有在愤怒中使用它,但是几个简单的测试没有发现任何严重的问题.