arrays - 数组维度的排序

标签 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))

当两个维度存在较大差异时,分配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/

相关文章:

arrays - 将未知大小的数组(子例程输出)传递给另一个子例程

fortran - 通过 fftw_mpi_r2c_2d 和 fftw_mpi_c2r_2d 输出不正确

double - 扩展的 double

包括使用 Fortran 预处理器进行显示

C - 将字符串数组分配给包含 21 个或更多崩溃的数组

java - 无法解析方法添加 ArrayList

javascript - 使用 Javascript 和下划线循环嵌套对象和数组

Javascript - 合并具有唯一结果的二维数组

php - foreach 内部的查询如何

c# - LSODA 到 dll - Fortran (F77) 到 dll 从 C# 调用