3D复杂数组在内存中是如何布局的

How is a 3D complex array laid out in memory

我想知道 3d 复杂数组在计算机内存中是如何布局的? Fortran 中的示例会有所帮助。

我正在尝试对 3d 复数数组进行一维正弦变换,并且我正在使用 FFTW 中的例程。 http://www.fftw.org/fftw3_doc/Advanced-Complex-DFTs.html#Advanced-Complex-DFTs

所以我需要计算出 FFT 例程中参数(i.e.howmany、istride 和 idist)的值。谢谢

复数 Fortran 标量值存储为值对 [实数、虚数]。所有 Fortran 数组都是 column-major order,这意味着第一个索引是变化最频繁的索引。复数数组的每个元素都是一对(实数,虚数)。

一个 Fortran 数组

complex(c_float_complex) :: A(nx, ny, nz)

就像一个C数组

float A[nz][ny][nx][2]

(是的,我知道现代 C 中也有一个可选的复杂类型)。

所以顺序是这样的:

(re(1,1,1),im(1,1,1)), (re(2,1,1,),im(2,1,1)), (re(3,1,1,),im(3,1,1)) ... (re(nx,1,1,),im(nx,1,1)), (re(1,2,1),im(1,2,1)) ...

有关详细信息,请参阅 column-major order link。