1

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

至少在原始 FFTW中,FFTW_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:输入数组是否可以在转换过程中被覆盖。

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

最终的问题是:知道 FFTW_PRESERVE_INPUT 不能与 pyFFTW 一起传递,我至少可以依靠在原始 FFTW 中这个标志 FFTW_PRESERVE_INPUT 是默认的事实吗?回想一下上面引用的评论:“是否可以覆盖输入数组” pyFFTW 包装器的作者是否知道更多内容并且默认的 FFTW_PRESERVE_INPUT 不起作用?

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

>>> pyfftw.__version__ '0.10.1

4

1 回答 1

1

是的,除非明确请求,否则将使用所有默认值 - 这意味着除非您请求DESTROY_INPUT, thenPRESERVE_INPUT是隐式的,除非您有一个多维 c2r 变换,在这种情况下输入将被破坏(这记录在Schemes您链接到的文档部分,以及您链接到的 FFTW 文档)。

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

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

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

于 2016-05-31T08:50:24.960 回答