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。
我想知道 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。