【发布时间】:2016-05-30 16:11:19
【问题描述】:
我想知道是否有可能在正向 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:输入数组是否可以 在转换期间被覆盖。
在 builders/_utils.py 文件的代码中,在函数 _Xfftn 的定义中,只有 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
【问题讨论】:
-
标准 FFT 的天才之处在于它是一种就地操作,因此它总是会覆盖输入。如果您想保留输入,请保留一份副本。
-
@roadrunner66 这里fftw.org/doc/Planner-Flags.html FFTW 的作者允许使用 2 个参数。要通过:DESTROY_INPUT & PRESERVE_INPUT。他们这样做是出于某种原因,而我的问题确实是“我可以依赖 PRESERVE 是默认设置的假设吗?”。
-
@roadrunner66 我问的是保留输入,因为我必须对非常相似的向量执行许多正向变换,因此我宁愿对单个向量进行微小的更改,而不是从头开始设置每个输入向量输入向量。
-
然后将该单个输入向量放入一个变量中,然后在将该副本提交到 FFT 之前对该副本应用微小的更改。
-
overwrite_input是您对pyFFTW的指示,让库知道覆盖输入是可以的。我不明白那个论点的问题?
标签: python python-3.x fft fftw pyfftw