自从我做任何 FORTRAN 以来已经超过 25 年了。
我相信 FORTRAN 与许多其他语言不同,它以
列主要顺序。这意味着最左边的索引是
在处理多时变化最频繁的一种
线性顺序的维数组。一次
达到最左边索引的最大维度,将其设置回1,假设基于1
索引,并将下一级索引增加 1 并重新开始该过程。
计算任何给定地址偏移的索引配置
您需要知道 4 个数组维度中每个维度的值。没有这个
你做不到。
示例:
假设您的数组的尺寸为 2 x 3 x 4 x 5。这意味着
矩阵中总共有 2 * 3 * 4 * 5 = 120 个单元格。你想要对应的索引
到第 200 个字节。
这将是 (200 / 4) - 1 = 第 49 个单元格(假设每个单元格 4 个字节并且偏移量为零
是第一个单元格)。
首先观察特定索引如何转化为偏移量...
元素 X(1,1,1,1) 出现在哪个单元格编号上?简单回答:1
元素 X(1, 2, 1, 1) 出现在哪个单元格编号?自从我们骑车经过
最左边的维度必须是那个维度加 1。换句话说,
2 + 1 = 3. X(1, 1, 2, 1) 怎么样?我们通过前两个维度循环
这是 2 * 3 = 6 加 1 得到 7。最后 X(1, 1, 1, 2) 必须是:
2 * 3 * 4 = 24 加 1 得到第 25 个单元格。
注意下一个最右边的索引直到单元格编号才会增加
超过其左侧指数的乘积。使用这个观察你可以
通过从最右边开始计算任何给定单元格编号的索引
最左边的索引如下:
最右边的索引每 (2 * 3 * 4 = 24) 个单元格递增。 24 进入 49(单元格编号
我们想找到索引)两次
剩下1个。添加 1(对于基于 1 的索引),它给了我们一个最右边的
索引值为 2 + 1 = 3。下一个索引(向左移动)每 (2 * 3 = 12) 个单元格更改一次。一进12
零次,这给了我们索引 0 + 1 = 1。下一个索引每 2 个单元格更改一次。一进二零
次给出 1 的 incex 值。对于最后一个(最左边的索引),只需将 1 添加到任何值
剩下的,1 + 1 = 2。这给了我们以下参考 X(2, 1, 1, 2)。
通过将其返回到偏移量进行双重检查:
((2 - 1) + ((1 - 1) * 2) + ((1 - 1) * 2 * 3) + ((3 - 1) * 2 * 3 * 4) = 49。
只需更改数字并对任意数量的维度使用相同的过程
和/或偏移量。