排列数组维度

cst*_*ats 2 arrays fortran

给出以下代码:

integer, parameter :: n = 10000
integer, parameter :: m = 3

real, dimension(:,:), allocatable :: arr

! First way
allocate(arr(n,m))

! Second way
allocate(arr(m,n))
Run Code Online (Sandbox Code Playgroud)

arr当两个维度(第一种方式或第二种方式)存在巨大差异时,分配的"最佳"方式是什么?它是否重要,或者它是否强烈依赖于如何arr使用?

Ale*_*ogt 5

Fortran是专栏专业,即第一个维度变化最快.

维度的最佳选择取决于您的问题:如果arr是3D空间中的坐标列表,并且您通常对这些坐标进行操作,则应该选择第二个选项:

allocate(arr(m,n))
arr(:,1) = [x, y, z]
! ...
Run Code Online (Sandbox Code Playgroud)

然后,每个坐标都有一个连续的布局.

如果你有三个n = 10000相反长度的向量(例如三个右手边),选项一将为每个向量提供连续的块.

总之:这取决于你想要做什么.