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

至少在原始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 fftwfftw-3.3.4-6.fc23.x86_64

>>> pyfftw.__version__'0.10.1

最佳答案

是的,除非明确请求,否则将使用所有默认值-这意味着除非您请求DESTROY_INPUT,否则PRESERVE_INPUT是隐式的,除非您具有多维c2r转换,否则输入将被销毁(在链接到的文档的Schemes部分以及链接到的FFTW文档中对此进行了记录)。

如果您发现输入被销毁的情况,并且未明确要求输入或不是上述转换之一,则这是一个错误,应报告。

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

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

关于python - pyFFTW是否允许保留输入数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37529935/

10-11 23:11