我知道一般来说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. 为什么我的卷积程序与numpy&scipy不同?
- 5. float16 VS FLOAT32卷积神经网络
- 6. python中的概率函数卷积
- 7. 两个矩形脉冲的卷积Python
- 8. SciPy中的2D积分
- 9. 傅立叶变换/使用numpy/scipy在python中进行迭代反卷积
- 10. Scipy积分出错
- 11. Golang中的卷积
- 12. Matlab的卷积码
- 13. 转置卷积(反卷积)算法
- 14. 卷积去卷积对给出了略有不同的维度
- 15. Tensorflow:在卷积
- 16. Python,从ndimage过滤器卷积功能
- 17. 最大池层vs跨步性能的卷积
- 18. 两个pdf的卷积
- 19. FFT卷积 - 3x3的内核
- 20. Tensorflow中的Dialated卷积
- 21. C++中的3d卷积
- 22. 与caffe解卷积
- 23. 卷积:在卷积的最后一个元素是永远正确的
- 24. python SciPy给pip安装scipy的错误
- 25. 1卷积可以分成2个卷积吗?
- 26. Haar级联方法vs卷积神经网络?
- 27. 卷积神经网络中并行和顺序卷积之间的区别
- 28. 这是在普通卷积神经网络中进行的基本卷积吗?
- 29. Python中最快的2D卷积或图像过滤器
- 30. 基于DFT的OpenCV的卷积偏移
是否有一个原因,你不能只是时间两种方法,例如用'timeit'? – Dougal 2013-02-22 06:57:19
我不知道这个功能。我会尽力。我也想知道底层理论。 – LWZ 2013-02-22 07:22:57