【问题标题】:Resources for doing an n dimensional FFT of a huge multi dimensional array对大型多维数组进行 n 维 FFT 的资源
【发布时间】:2017-07-03 06:13:32
【问题描述】:

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

【问题讨论】:

  • 是 255^50,如果是 32 位浮点数,大约是 8.4*10^120 字节。祝你好运找到存储所有数据的地方……宇宙中最多有 10^82 个原子。我想你会用完硬盘驱动器

标签: python fft distributed-computing ram


【解决方案1】:

如果您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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2012-06-10
    • 1970-01-01
    • 2012-03-16
    • 2010-10-13
    相关资源
    最近更新 更多