用于进行巨大多维阵列的n维FFT的资源

时间:2017-07-03 06:13:33

标签: python fft distributed-computing ram

我有一个50维数组,其尺寸为255 x 255 x 255 x ...(50倍).. x255。所以它总共有50 ^ 255个浮点数。它甚至超出了考虑适合RAM的范围。此外,我需要采用该阵列的50维快速傅里叶变换(DFT)。我不能在普通PC上的python中做到这一点。我甚至无法想象在GPU上做这件事。所以我猜我必须得到硬盘内存的帮助,但即使这样太大了。我不需要实时,我甚至可以负担得起它运行的几天。我不知道我需要什么样的机器,甚至可能吗?感谢您的建议。超级计算机,网格或其他东西,即使它太昂贵,我也不担心投资。

1 个答案:

答案 0 :(得分:2)

如果您found enough universes to save your data in,您可以执行以下操作:

傅立叶变换是可分离的,这意味着一个接一个地计算每个轴的DFT将得到与计算n维DFT时相同的结果:

for i in range(C.ndim):
    C[...] = numpy.fft.fft(C, axis=i)

使用2D张量仔细检查值是否正确(因为我们有一个2D FFT numpy.fft.fft2进行比较):

import numpy
A = numpy.random.rand(*[16] * 2)
B = numpy.fft.fft2(A)
C = A.astype(numpy.complex)  # output vector for separable FFT

for i in range(C.ndim):
    C[...] = numpy.fft.fft(C, axis=i)

numpy.allclose(C, B)  # True