11

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

integer, dimension(3) :: index = [4,6,9]
double precision, dimension(10,10,10) :: data

data(4,6,9)有没有比写作更好(更通用)的访问方式data(index(1), index(2), index(3))?不必对data数组的等级进行硬编码会很好。

(天真地我想写data(index),但当然这实际上意味着不同的东西 - 子集“收集” - 要求data本身是一个排名第一的数组。)

对于它的价值,这与JavaScript 中的索引数组的多维索引本质上是相同的问题,但在 Fortran 中。不幸的是,那里的聪明答案不适用于预定义的数组等级。

4

1 回答 1

11

不。我能想到的所有解决方法都是可怕的黑客,你最好编写一个函数来接受dataindex作为参数并吐出你想要的元素。

但是,您可能能够使用现代 Fortran 的数组等级重新映射功能来做完全相反的事情,这可能会满足您对数组等级进行快速和松散操作的愿望。

鉴于声明

double precision, dimension(1000), target :: data

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

double precision, pointer :: index_3d(:,:,:)

然后像这样设置:

index_3d(1:10,1:10,1:10) => data

嘿 presto,您现在可以同时使用 rank-3 和 rank-1 索引data,这与您想要做的很接近。我还没有在愤怒中使用它,但是一些简单的测试并没有发现任何严重的问题。

于 2012-08-17T15:24:19.973 回答