问题标签 [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.
python - pyFFTW 链接的变量比预期的要多
我正在使用 python 编写使用 pyfftw 的分步傅立叶变换方法。我想我主要了解发生了什么,但我不明白为什么当我尝试只对一个变量进行操作时,我的变量会发生如此多的变化。
在下面的代码中,我从一维数组 (complex128)E
开始,并最初将其分配给a
. 然后我通过规划 DFT,以便我有 2 个操作在时间和频率之间来回切换。
我的代码:
问题是一旦我进入代码的第二部分,分配a[:] = np.power(np.absolute(A0),2)
似乎A0
和a
.
这也发生在Iz = np.power(np.absolute(A0),2) + fft_object()
,在每种情况下,我分配的变量a
或b
似乎保持链接而不是临时变量。
这是怎么回事???
python - pyFFTW中的卷积产品与scipy不同
我正在尝试实现一个 FFT 卷积,该卷积模拟scipy.fftconvolve
使用 pyfftw 进行性能和图片作为输入:
调用它:
输出 :
调用 scipy 等效项:
输出 :
检查输出:
给出:
和 :
给出:
所以输出不正确。删除fftshift
不会改变任何事情。
在我的项目中,scipy 版本给出了正确的图像,我实现的 pyfftw 给出了模糊的输出。
编辑
我也在double
类型 ( np.float64
) 中进行了测试,虽然卷积的原始结果足够接近(实际上,scipy 以双倍进行卷积),但图片仍然很糟糕:
现在 :
返回:
什么可以给出这个结果?
python - 加速 C 连续对齐阵列的 2D FFT(W)
我正在使用 pyFFTW 对 2D 复数数组进行 2D FFT。这些数组可能会变得非常大(~128 GiB),因此执行时间至关重要。(背景是光学物理学中的波前传播。)
看看下面的玩具代码:
在我的现代 64 位机器上执行 FFT 需要几秒钟。
分两步执行 2D FFT(所有列和所有行的 1D-FFT)时,结果和执行时间都保持不变:
但是,单独计算这些步骤的时间表明column-FFT 比 row-FFT 慢大约 10 倍。
我想,原因是数组被逐行保存到物理 RAM 中。确实, a.flags 给出了
而 a.strides 给出
因此,该数组是 C 连续的,并且似乎正确对齐。但是,删除标志 'FFTW_UNALIGNED' 会使列 FFT 大约再慢 10 倍(而行 FFT 变得稍微快一些)。
因此,我的问题是:
对齐是否有问题,或者对于 C 连续数组的物理限制,对列的访问比对行的访问慢 10 倍?
编辑:确实,10 倍似乎太大了。让我们比较一下行和列的简单读/写访问:
和
将列与偶数索引相乘(第一个变体)比将行与偶数索引(第二个变体)相乘慢大约 2 倍。
编辑:在 ipython 中输入的确切代码是
python - ImportError:导入python模块'pyfftw'时未定义的符号
我想使用 pyfftw 模块并使用sudo apt-get install python-fftw
. FFTW 模块已安装。但是,当我尝试import pyfftw
此错误时:
任何人都知道如何解决这个问题?有关其他信息,我的系统架构是 armv7l(我在 odroid 中运行程序),我的操作系统是 Ubuntu,我使用 python 2.7.12。
谢谢你。
python - 奇函数的离散傅里叶变换
我有一个初始函数u(x,0) = -sin(x)
,我想以u(x,t) = $\sum_{k \geq 1} a_{k} sin (kx)$
. 我尝试使用函数的正常扩展,$\exp{ikx}$
但它给解决方案增加了一些错误。
谁能建议我如何过滤在整个解决方案中仍然奇怪的傅立叶系数的过程numpy.fft.fft
?
python - 如何在 WINDOWS 10 上使用 libfftw3 安装 Python 包学习者(GIST 图像描述符)?
如您的网页所述,我在计算机上安装leargist
软件包时遇到问题: https ://pypi.org/project/pyleargist/ 用于使用描述符提取图像特征。WINDOWS 10
GIST
说明说要安装libffw3
(http://www.fftw.org),我不明白如何安装WINDOWS 10
。似乎它主要是为UNIX/LINUX
系统构建的。
我将逐步了解安装说明。
python - 如何使用 pyFFTW 类进行二维傅立叶变换?
我想使用 pyFFTW 创建 2d fft 和 ifft。但是,文档有点混乱: https ://pyfftw.readthedocs.io/en/latest/source/tutorial.html#the-workhorse-pyfftw-fftw-class
所以,基本上,代码:
我不明白什么是 fft_object,为什么它需要 a 和 b 作为输入,甚至不明白 a 和 b 在这里做什么。他们只是一些空的模板来模拟输入和输出的数据吗?这个过程的作用是什么?
我也不明白a是如何转换成fft_a的,甚至没有函数调用。函数如何知道 a 是输入?(我阅读了整个页面并在 pyfftw.builders 中找到了提及
不过,pyfftw.builders.fft(a) 定义的 fft_object 是什么?建设者在做什么?)
另外,如果 fft 是
会不会是
?
假设我有一个 3 x 3 矩阵 x=np.ones([3,3]);
我该如何做 fft2(x) 和 ifft2(x)?
此外,我该如何做 rfft2(x) 和 irfft2(x)?(rfft2 和 irfft2 代表实域中的快速傅立叶变换)。
python-3.x - 为什么在 pyfftw 中需要 fft_object.update_arrays()?
我需要在正方形、2 的幂、complex64 数组上执行大量 2D FFT。我想使用 pyfftw 包装器来尽可能快地做到这一点。
我正在通过 Ubuntu 18.04 运行 Anaconda,并使用“conda install -c conda-forge pyfftw”下载了 pyfftw 包
我已经设法在我的系统上运行 2D FFT,但我的一阶近似代码不起作用,我的“解决方法”似乎是在添加冗余代码。
我想知道我是否正在设置数组、fft_objects 并正确执行 FFT。
好的,现在,文档(在 pyfftw.FFTW 类中的 Arguments 下)说,
“这些数组的内容将在初始化期间被规划过程破坏。”
所以这告诉我我需要将数据从“arr1”复制到 forward_input_buffer 数组中(此时我们不关心输出缓冲区,因为我们即将计算该数据)
所以,
应该计算矩形数组(我们复制到输入缓冲区)的 FFT 并将输出放入 forward_output_buffer。但是,这不起作用。forward_output_buffer 数据不变。这就是我感到困惑的地方。相反,要让它发挥作用,你必须做,
这确实有效。但现在我有一个问题。np.copy 命令肯定是多余的吧?相反,我可以这样做,
但是我的问题是;update_arrays 命令是否将argument1 (arr1) 的内容复制到原始实例化缓冲区(forward_input_buffer) 中?或者该命令是否告诉 forward_fft_object 现在查看 arr1 的输入数据?
如果我制作的其他大小、dtype 等相同的数组(我的代码可能使用 arr1、arr2、arr3 ......即输入的许多不同数组)不是 n 字节对齐或 simd 对齐怎么办?
编辑(我意识到最后一点不清楚):
如果我必须对大量不同的数据(但总是相同的大小,dtype)执行大量 2D FFT。在那种情况下,我必须这样做,
但这似乎很冗长,所以我想知道我是否正确使用了 pyfftw 函数。
numpy - 尺寸如何影响 pyfftw 中的性能?
我正在尝试使用 FFT 和 pyfftw 实现 3d 卷积。我使用在 SO 的另一篇文章中发布的代码作为基础:
我的数据 A 的形状为 (931, 411, 806),我的过滤器 B 的形状为 (32, 32, 32)。如果我在 24 核机器上使用 24 个线程运行此代码,则该操作需要 263 秒。现在,如果我在同一台机器上运行相同的实验,但这次 A 的形状为 (806, 411, 931)只是轴的交换,代码只需要 16 秒。这是什么原因?是否有获得最佳性能的经验法则?也许填充尺寸之一?谢谢!
python - 当使用 scipy_fftpack 的插入式 fft 替代品时,智慧是否在全球范围内存储?
当使用 FFTW 替换 scipy_fftpack 时,它是否会计算每个 FFT 大小的智慧,然后再也不计算?
我有一个重复调用的循环
由于无法进入的原因,我无法批量进行 FFT。但是,智慧是在循环的每次迭代中重新计算,还是规划器缓存智慧并将其用于循环的每次迭代?