我想使用pyfft反复计算二维数组的行子集的离散傅里叶变换。我不知道需要转换哪些行,这取决于上一轮的输出。我知道这样做对所有行都是浪费的。
据我理解,FFTW3中的“计划”与转换类型(c2c、r2c等)和输入/输出长度相关联,在一维情况下,输入/输出长度总是一个向量。在pyfftw中,“计划”似乎与转换类型和输入/输出形状相关联,因此我的解释是,它对每一行都使用相同的FFTW3计划。
我的问题是:是否可以对某些行使用相同的FFTW3计划,而不为所有可能的行组合创建单独的pyfftw.FFTW对象?
另外,我想知道pyfftw是如何使用多个核的:它是对每一行使用多个核(考虑到FFTW3文档,这似乎很自然),还是将不同的行划分成不同的核(这是我最初的假设)?
发布于 2017-04-18 09:02:26
如果可以从视图中创建numpy数组,则可以使用pyFFTW进行规划--所有有效的numpy数组都应该工作得很好。
这意味着以下几点:
我经常使用的一种解决方案是将想要转换的行复制到临时数组中,并对其进行转换。您很可能会发现这是最快的选项(特别是当您允许字节偏移量正确时)。
显然,如果您总是有不同的行数,这是行不通的。您可能仍然会发现,如果您计划转换的行数最多,然后在子集中复制,则仍然比其他情况下做得更快。
即使降低到C级,您也会遇到的问题是,如果经常更改转换大小,则计划开销很可能占主导地位。
您还可以尝试pyfftw.interfaces.numpy_fft,它通常速度更快,并且能够缓存重复的转换大小。
https://stackoverflow.com/questions/43459519
复制相似问题