问题标签 [pyfftw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
209 浏览

python - PyFFTW 智慧规划不会加快对更大阵列的后续调用

我正在做一些时间计算比较

我导入必要的包:

为上述三个测试场景定义单独的函数:

然后遍历不同长度N的数组timeit

结果如下:

最初,对于较短的阵列,计划中的智慧似乎正在发挥作用。但是,随着数组长度变长,结果几乎没有差异。我什至尝试过使用FFTW_MEASURE60 秒planning_timelimit,但结果是一样的。

我已经翻阅了文档,但看起来要么我错过了明智的计划,要么计划实际上并不像我预期的那样有效/重要。

在有人推荐线程之前,我想先了解智慧规划的价值!

0 投票
1 回答
636 浏览

python - 导入 pyfftw 时出错

导入 pyfttw 时出现以下错误(Windows 10 64 位,cpython 64 位):

我已经使用 pip 安装了 pyfftw whl 文件,并且安装成功。请帮我。

0 投票
1 回答
546 浏览

python - Pyfftw 比 matlab fft 慢

我正在尝试将 Pyfftw(在 Python 3.6 中)与 matlab r2017a fft 进行比较。

而如果我使用matlab:

这个请求只是计算 fft 算法的时间,也就是 python 调用 fft_object() 的时间大致相同。

预先感谢您的支持。

0 投票
1 回答
64 浏览

pyfftw - pyfftw 中的计划和行子集

我想用来pyfft重复计算二维数组行子集的离散傅里叶变换。我事先不知道我需要转换哪些行,这取决于上一轮的输出。我知道对所有行都这样做是浪费的。

据我了解,“计划”FFTW3与变换类型(c2c、r2c 等)和输入/输出长度相关,在 1D 情况下,输入/输出长度始终是向量。pyfftw看起来“计划”与变换类型和输入/输出形状相关联,所以我的解释是它对每一行都使用相同的计划FFTW3

我的问题是:是否可以对某些FFTW3行使用相同的计划,而无需为所有可能的行组合创建单独的对象?pyfftw.FFTW

另一方面,我想知道如何pyfftw使用多个核心:它是为每一行使用多个核心(这在FFTW3文档中看起来很自然)还是将不同的行分配给不同的核心(这是我最初的假设)?

0 投票
0 回答
279 浏览

matlab - 与MATLAB的FFT结果完全相同的pyFFTW函数

我正在寻找与 MATLAB 的 FFT 具有完全相同结果的 pyFFTW 函数。

我已经尝试过一些 pyFFTW 的功能,比如波纹管。

x 是一维数组,类型:np.float32

Python 3.5.2:

或者

MATLAB:

但是,与 MATLAB 的 FFT 相比,存在一些差异(约 0.000001)。

有没有办法用 MATLAB 的 FFT 得到完全相同的结果?

  • 蟒蛇版本:3.5.2
  • pyFFTW 版本:0.10.4
  • numpy 版本:1.12.0
  • MATLAB 版本:8.3.0.532 (R2014a)

谢谢!

0 投票
1 回答
403 浏览

python - 在 Linux Mint 18.1 'Serena' 下安装 pyFFTW 失败

我正在尝试pyFFTWFFTWC 库安装 Python 包装器,但似乎无法解决问题所在。我从官方页面(版本 3.3.6,)下载了 FFTWfftw-3.3.6-pl2.tar.gz并安装在/usr/local/binusing

如提供的自述文件中所述。然后我跑

按照网站上的建议。终端给了我这个输出:

我怀疑这与缺少软件包有关,但谁知道...我检查了所有要求,应该安装所有程序以使用 FFTW 和 setuptools 等等。我什至尝试从 github 源代码构建,但这给了我同样的错误。关于我可能做错的任何建议?

PS:很抱歉,终端输出太长了……我已经将其缩短为(imo)重要部分。

提前感谢您的帮助!

见面会

0 投票
1 回答
897 浏览

python - 如何让 pyFFTW 运行?

我基本上是在寻找一种更快的替代方法scipy.fftpack.fft并找到了pyFFTW.

但是,我快要绝望了,因为无论我尝试什么,我都无法pyFFTW开始工作。

到目前为止我做了什么:

  • pyFFTW通过以下方式安装PIPpip install pyfftw
  • 从此处下载适用于 Windows 的 FFTW 3.3.5
  • 解压缩 zip 文件并将任何内容复制到pyFFTW

一旦我尝试 import pyFFTW,就会发生以下异常:

我正在使用numpy 1.7.1.

非常感谢任何有关如何解决此问题的建议。

顺便说一句:我已经尝试过pyFFTW多次卸载/安装 numpy。

0 投票
1 回答
111 浏览

python - 如何重用 pyfftw 对象?

也许这只是我的误解,但是您如何重用 pyfftw 对象?

当我运行类似以下代码时,img1_fft尽管img2_fft接收到不同的输入,但它们是相同的。当我取消注释重建的行时fftwObj,我得到了所需的输出。

我是不是做错了什么,因为“计划”的重点是不必重建 pyfftw 对象?我想只使用相同的 pyfftw 对象(因为我所有的图像都是相同的大小)并且只需更改对象的输入。

0 投票
1 回答
409 浏览

python - 如何使用 PyFFTW 的智慧

我没有在 pyfftw 的文档中看到如何使用“智慧”功能的实际示例,所以我有点困惑。

我的代码如下所示:

文档export_wisdom输出一个字符串元组,并将这个import_wisdom元组作为参数。

我应该什么时候导出智慧,我应该将这个元组保存到每个 FFT 的文件中?

我什么时候重新加载它?在调用每个 FFT 之前?

0 投票
0 回答
467 浏览

python - Python pyfftw 内存使用情况

任务:大型阵列的快速实数到复数 FFT 计算。

数组的形状a是(103430 x 1 x 100 x 900),其中尺寸是(时间,虚拟暗淡,经度,纬度),所以我们说(~100000 x 1 x 100 x 900)。FFT 应在轴 0、2、3 上计算。

Numpy.fft.fftn(a,axes=(0,2,3))耗时太长(约 6 小时),因此我想使用pyfftw。我尝试使用pyfftw.interfaces.numpy_fft.fftn(a,axes=(0,2,3)).

问题:输入数组的内存消耗大约相当于。我们机器 RAM 的 13%,因此包括输出数组,它应该变成 ~ 40%(输出很复杂)。然而,在计算过程中,内存使用率上升到接近 100%,直到命令退出并在PyCharm中出现内存错误。

我创建了一个较小版本的随机数数组 (10000,1,100,900),内存消耗约为 1.3%。如果仅在轴 3 上执行 FFT,则内存使用量暂时上升到 ~10.6 %,如果在前面提到的轴 0、2、3 上执行,内存使用率会暂时上升到 ~ 13 %。

我假设中间数组副本会导致这种高内存使用。我搜索了pyfftw 文档并尝试将auto_align_inputandauto_contiguous选项设置为 False 和overwrite_inputTrue,但没有成功。我还尝试自己创建 FFTW 对象并使用参数。

同样使用 FFTW 的 MATLAB 在几秒钟内执行 (100000,1,100,900) 的任务,最大内存消耗是必要的 ~40%。显然,从算法的角度来看,数组的中间副本(运行 pyfftw 时使用额外内存的可能原因)是不必要的,如 MATLAB 示例所示。

问题:有没有办法在 pyfftw 中强制绝对没有额外的内存消耗?如果是这样,怎么做?哪些参数?


PS:两种可能的解决方法是

  1. 将数组从 python 保存到 fit,将其加载到 MATLAB,执行 FFT,将其从 MATLAB 保存到 fit,然后将其加载回 python
  2. 通过 for 循环进行重复的单维 FFT;内存开销将不相关,结果可以作为循环的一部分插入到输出数组中

但是,我想避免这些。应该有一种方法可以执行单个 3D-FFT,而不会消耗机器的整个 RAM (512 GB)。


更新:我运行了以下命令:

事实证明,正在使用的内存实际上是 a + b + 内部 run_fftw() 的复杂广播副本。如果在定义 run_fftw 之前已经将 a 广播到复合体,或者在创建 run_fftw 之后删除 a ,这可以减少到复合广播 a + b 的内存。

由于这个问题现在已经准解决了(感谢@HenryGomersall),现在唯一好奇的问题是是否有一个可通过 fftn 调用的从实数到复数的方案,它提供所有频率,包括负频率,并且不在内部广播输入数组复杂。

我明白虽然在这种情况下可以使用 rfftn 。不过,这会丢弃(冗余的)负频率。