使用基于FFT的自相关:
import numpyfrom numpy.fft import fft, ifftdata = numpy.arange(5*4).reshape(5, 4)print data##[[ 0 1 2 3]## [ 4 5 6 7]## [ 8 9 10 11]## [12 13 14 15]## [16 17 18 19]]dataFT = fft(data, axis=1)dataAC = ifft(dataFT * numpy.conjugate(dataFT), axis=1).realprint dataAC##[[ 14. 8. 6. 8.]## [ 126. 120. 118. 120.]## [ 366. 360. 358. 360.]## [ 734. 728. 726. 728.]## [ 1230. 1224. 1222. 1224.]]
您对答案的维度为(5,7)的陈述感到有些困惑,所以也许有些重要的事情我没有理解。
编辑:在mtrw的建议下,不会环绕的填充版本:
import numpyfrom numpy.fft import fft, ifftdata = numpy.arange(5*4).reshape(5, 4)padding = numpy.zeros((5, 3))dataPadded = numpy.concatenate((data, padding), axis=1)print dataPadded##[[ 0. 1. 2. 3. 0. 0. 0. 0.]## [ 4. 5. 6. 7. 0. 0. 0. 0.]## [ 8. 9. 10. 11. 0. 0. 0. 0.]## [ 12. 13. 14. 15. 0. 0. 0. 0.]## [ 16. 17. 18. 19. 0. 0. 0. 0.]]dataFT = fft(dataPadded, axis=1)dataAC = ifft(dataFT * numpy.conjugate(dataFT), axis=1).realprint numpy.round(dataAC, 10)[:, :4]##[[ 14. 8. 3. 0. 0. 3. 8.]## [ 126. 92. 59. 28. 28. 59. 92.]## [ 366. 272. 179. 88. 88. 179. 272.]## [ 734. 548. 363. 180. 180. 363. 548.]## [ 1230. 920. 611. 304. 304. 611. 920.]]
必须有一种更有效的方法来执行此 *** 作,尤其是因为自相关是对称的,而我没有利用这一点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)