给出以下代码:
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
使用?
Fortran是专栏专业,即第一个维度变化最快.
维度的最佳选择取决于您的问题:如果arr
是3D空间中的坐标列表,并且您通常对这些坐标进行操作,则应该选择第二个选项:
allocate(arr(m,n))
arr(:,1) = [x, y, z]
! ...
Run Code Online (Sandbox Code Playgroud)
然后,每个坐标都有一个连续的布局.
如果你有三个n = 10000
相反长度的向量(例如三个右手边),选项一将为每个向量提供连续的块.
总之:这取决于你想要做什么.