pyFFTW 是否允许保留输入数组

Does pyFFTW allow to preserve the input array

我想知道是否有可能在转发期间强制执行 pyFFTW(FFTW 的包装器)要保留的输入向量 r2c 变换。

至少在 原始 FFTWFFTW_PRESERVE_INPUT 似乎是一个默认选项(在这里查看算法限制标志: http://www.fftw.org/doc/Planner-Flags.html )

使用 pyFFTW 的 FFTW.__call__() 可以传递多个标志,但此处仅列出 'FFTW_DESTROY_INPUT' : http://hgomersall.github.io/pyFFTW/pyfftw/pyfftw.html#pyfftw.FFTW

可能,这不仅是文档中的失误,因为在源代码中,在文件 builders/builders.py 中有一个有点可怕的语句(第 166 行):

overwrite_input: Whether or not the input array can be overwritten during the transform.

进一步在文件 builders/_utils.py 的代码中,在函数 _Xfftn 的定义中,只存在 destory 标志: if overwrite_input: flags.append('FFTW_DESTROY_INPUT')

最终的问题是:知道 FFTW_PRESERVE_INPUT 不能通过 pyFFTW 传递,我是否可以至少依赖原始 FFTW 中的事实 这个标志 FFTW_PRESERVE_INPUT 是默认的?回想上面引用的评论:"Whether or not the input array can be overwritten" pyFFTW 包装器知道更多,默认 FFTW_PRESERVE_INPUT 行不通?

$ rpm -q fftw fftw-3.3.4-6.fc23.x86_64

>>> pyfftw.__version__ '0.10.1

是的,除非明确要求,否则将使用所有默认值 - 这意味着除非您要求 DESTROY_INPUT,否则 PRESERVE_INPUT 是隐式的,except 在如果你有一个多维 c2r 转换,在这种情况下输入将被销毁(这在你链接到的文档的 Schemes 部分以及你链接到的 FFTW 文档中记录)。

如果您发现输入被破坏的情况,并且它既没有被明确请求,也不是上述转换之一,那么这是一个错误,应该报告。

interfaces 代码制作各种副本以确保在必要时保留转换。

我的回忆是,规划阶段对保护数组的保护要宽松得多 - 保护数组的最简单方法是使用 builders 接口,除非另有明确说明,否则它将始终存储原始数组并复制它回来了。