给出以下代码:
integer, parameter :: n = 10000
integer, parameter :: m = 3
real, dimension(:,:), allocatable :: arr
! First way
allocate(arr(n,m))
! Second way
allocate(arr(m,n))
当两个维度存在较大差异时,分配arr
的“最佳”方式是什么,第一种方式还是第二种方式?这重要吗,还是强烈依赖于 arr
的使用方式?
最佳答案
Fortran 是 column-major ,即第一个维度变化最快。
尺寸的最佳选择取决于您的问题: 如果 arr 是 3D 空间中的坐标列表,并且您通常对这些坐标进行操作,则您可能应该选择第二个选项:
allocate(arr(m,n))
arr(:,1) = [x, y, z]
! ...
然后,每个坐标都有一个连续的布局。
如果您有三个长度为 n = 10000
的向量(例如三个右侧),选项一将为每个向量提供连续的 block 。
结论:这取决于您想要做什么。
关于arrays - 数组维度的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30263574/