我有下面一行要在Fortran中delcare一个更高维的数组:
real(8) X(48,20,7,3), Y(48,15,5)
我的问题是我们如何解释n维数组?我想知道下标的含义。此外,如果可能的话,如果你能提供等效的代码来在Matlab中创建相同的4D和3D阵列,我将不胜感激。
我试着四处寻找这种解释,但只发现一些例子提到,在不解释下标含义的情况下,可以这样做。我非常感谢你的帮助。
数组是数组元素的集合(例如,像real
或integer
或其他类型的数字(,它们按定义的顺序存储,默认情况下连续存储在内存中。
这意味着对于1D阵列,第二个元素在第一个元素之后,然后是第三个元素。。。
对于多维数组,您可以将它们以所谓的列主顺序存储在Fortran中。它与MATLAB中使用的顺序相同。意味着按照具有相同最后索引的元素连续存储在内存中的顺序存储元素。
在2D:A(2,3(中,顺序为:A(1,1(、A(2,1(、A
与MATLAB的比较。让我们拿这个阵列
a = [1 3; 2 4; 7 8]
矩阵看起来像
1 3
2 4
7 8
在Matlab中,即使Matlab存储具有连续列的数组,也可以在构造函数中使用行。这可能令人困惑。
在Fortran中,这是a(3,2)
,可以构造为
a = reshape([1, 2, 7, 3, 4, 8], [3,2])
数字按以下顺序存储:1、2、7、3、4、8(两种语言(。
在这两种语言中,数组元素a(2,1)
都等于2。
3D和4D阵列自然地扩展了这一点,但对于答案中的简单示例来说不太方便。
如果您有一个3D阵列B(n1, n2, n3)
,那么元素B(i1, i2, i3)
在内存中的线性顺序是(i3-1)*n2 + (i2-1)*n1 + i1
(假设第一个元素是元素编号1(。