我想使用pyfft
重复计算二维数组的行子集的离散傅立叶变换。我事先不知道需要转换哪些行,这取决于前一轮的输出。我知道为所有行做这件事都是浪费。
据我所知,FFTW3
中的'计划'与变换类型(c2c,r2c等)和输入/输出长度相关联,输入/输出长度始终是1D情况下的向量。在pyfftw
中,看起来“计划”与变换类型和输入/输出形状相关联,因此我的解释是它对每一行使用相同的FFTW3
计划。
我的问题是:是否可以对部分行使用相同的FFTW3
计划,而不为所有可能的行组合创建单独的pyfftw.FFTW
个对象?< / p>
另一方面,我想知道pyfftw
如何使用多个核心:它是否为每一行使用多个核心(这在FFTW3
文档中看起来很自然)或者是否会将不同的行划分出来到不同的核心(这是我最初的假设)?
答案 0 :(得分:0)
如果你可以从一个视图创建一个numpy数组,你可以使用pyFFTW进行规划 - 所有有效的numpy数组应该正常工作。
这意味着几件事:
我使用过的一个解决方案是将要转换的行复制到临时数组中,然后对其进行转换。您可能会发现这是最快的选择(特别是当您可以允许字节偏移正确时)。
显然,如果你总是有不同的行数,这不起作用。您可能仍然会发现,如果您计划转换的最大行数,然后在子集中进行复制,则仍然比其他方式更快。</ p>
即使您降到C级别,您遇到的问题仍然是,如果您经常更改转换大小,规划费用可能会占主导地位。
您还可以尝试pyfftw.interfaces.numpy_fft
,这通常比numpy更快,并且能够缓存重复的变换大小。