我知道一般来说FFT and multiplication
通常比直接convolve
运行速度更快,当阵列是比较大的。但是,我正在用非常短的响应(比如说1千分)来解释一个很长的信号(比如说1000万分)。在这种情况下,fftconvolve
似乎并没有太大的意义,因为它迫使第二阵列的第一阵列的同样大小的FFT。在这种情况下直接进行卷积会更快吗?Python的SciPy的卷积VS fftconvolve
回答
FFT通过快速卷积重叠相加或重叠保存通过使用比所述脉冲响应较大的FFT,这只是一个小的多(例如2X)算法可以在有限的存储器来完成。它将长的FFT分解成适当重叠的较短但零填充的FFT。
即使有重叠的开销,O(NlogN)将击败M * N的足够大的N和M.
效率看一看比较我在这里:
http://scipy-cookbook.readthedocs.io/items/ApplyFIRFilter.html
你的情况可能是使用一个普通的卷积,并使用基于FFT的卷积之间的过渡附近,所以最好的办法(如通过@Dougal在评论所说)是自己的时间了。
(请注意,我没有做重叠相加或在比较重叠保留。)
该链接似乎并没有指向你的意思(尽管我可以在页面中找到它) – luca 2016-07-12 12:34:33
@luca谢谢。该页面最初是在旧的scipy wiki上,现在已经消失了。我更新了链接。 – 2016-07-12 14:25:55
感谢你的帮助。现在我做了测试我自己,我做了卷积2个阵列,2^20和2^4的大小,这就是结果:
numpy.convolve: 110 ms
scipy.signal.convolve: 1.0 s
scipy.signal.fftconvolve: 2.5 s
所以我们有一个赢家,numpy的卷积是远快于其他。我仍然不知道为什么。
现在我试了2个更长的数组,大小为2^22和2^10。结果是:
numpy.convolve: 6.7 s
scipy.signal.convolve: 221 s
scipy.signal.fftconvolve: MemoryError
差异只是变大。
- 1. 卷积在Python
- 2. 批量卷积2d在numpy没有scipy?
- 3. python中的2D卷积
- 4. ValueError异常,而使用计算卷积SciPy的
- 5. 为什么我的卷积程序与numpy&scipy不同?
- 6. Python - 用高斯卷积
- 7. float16 VS FLOAT32卷积神经网络
- 8. python中的概率函数卷积
- 9. 两个矩形脉冲的卷积Python
- 10. SciPy中的2D积分
- 11. 傅立叶变换/使用numpy/scipy在python中进行迭代反卷积
- 12. 密度的卷积
- 13. Matlab的卷积码
- 14. Golang中的卷积
- 15. Scipy积分出错
- 16. 转置卷积(反卷积)算法
- 17. python中的可变边界的双积分Scipy + sympy(?)
- 18. 空间卷积与频率卷积图像的逆滤波器
- 19. 卷积去卷积对给出了略有不同的维度
- 20. 卷积在MATLAB
- 21. C++ STL卷积
- 22. 卷积核
- 23. Tensorflow:在卷积
- 24. 解卷积C++
- 25. Python:1d数组循环卷积
- 26. Python,从ndimage过滤器卷积功能
- 27. 最大池层vs跨步性能的卷积
- 28. 与Scipy的图像卷积:移位标识内核 - 计算如何完成?
- 29. 1维的fftconvolve与numbapro cuda
- 30. SciPy的INV(A)VS AI
是否有一个原因,你不能只是时间两种方法,例如用'timeit'? – Dougal 2013-02-22 06:57:19
我不知道这个功能。我会尽力。我也想知道底层理论。 – LWZ 2013-02-22 07:22:57