我想得到两个随机变量之和的众数和标准差。为此,我创建了PDF的离散表示,并执行卷积以获得新的PDF,从中计算模式和标准差。
我使用的是scipy.signal.fftconvolve
,但由于操作执行了大约40万次,这需要花费大量时间。
我想使用pyFFTW
库来加快速度,但无法使其工作。据我所知,我需要:
1.计算两个PDF上的FFT。
1.将FFT相乘。
1.计算FFT相乘的IFFT。
雪上加霜的是,这两个分布都不是以零为中心的,也不是对称的。
两个PDF的样本和当前卷积的代码可以在这里看到:https://gist.github.com/ajossorioarana/047202db9c2990b43cf7ba2e02735faf
关键部分是最后一个:
# Do the convolution with scipy.signal.fftconvolve
convolution_pdf = scipy.signal.fftconvolve(pdf1, pdf2, 'full')
convolution_pdf = convolution_pdf[0:len(pdf1)]
我试着用下面的代码替换上面的代码:
## Do the convovlution with pyfftw.builders
builder1 = pyfftw.builders.fft(pdf1)
builder2 = pyfftw.builders.fft(pdf2)
fft1 = builder1()
fft2 = builder2()
builder3 = pyfftw.builders.ifft(fft1*fft2)
convolution = builder3()
1条答案
按热度按时间ijnw1ujt1#
为了提高速度,你可以修补
scipy.signal.fftconvolve
以使用pyFFTW接口:但是我没有得到明显的改善。
pyFFTW在处理大量数据数组时有可能提高性能。然而,当涉及到在精简数据库上顺序迭代特定数量的操作时,改进被证明是相当小的。