这是我在网站上的第一个问题!我想获取两个(或多个)随机变量的总和,所以我这样做了
from scipy.stats import exponweib
import numpy as np
import matplotlib.pyplot as plt
# Parameters
shape, scale, delta = 1.3, 12, 1e-2
dist = exponweib(a=1, loc=0, c=shape, scale=scale)
grid = np.arange(0, 100, delta)
pmfs = dist.pdf(grid)*delta
# Do convolution (?)
def conv(a, b):
x = np.array([0])
for i in range(1, len(grid)):
x = np.append(x, sum(a[:i]*b[i-1::-1]))
return x
# Loop to convolve over multiple RVs
c = {1: pmfs}
for i in range(2, 4):
c[i] = conv(c[i-1], pmfs)
plt.plot(grid, c[1])
plt.plot(grid, c[2])
plt.plot(grid, c[3]);
所以,这让我this,看起来像我想要的,但是运行起来非常慢。
建议使用scipy.signal.fftconvolve的其他问题
x = fftconvolve(pmfs, pmfs, 'same')
plt.plot(grid, x);
但是它让我this。为什么不同?
import numpy as np
from scipy import signal
from scipy.stats import exponweib
import matplotlib.pyplot as plt
shape, scale, delta = 1.3, 12.0, 1.0e-1
dist = exponweib(a=1, loc=0, c=shape, scale=scale)
grid = np.arange(-50, 100, delta)
ewei = dist.pdf(grid)*delta
plt.plot(grid, ewei)
plt.show()
# %%
t = signal.fftconvolve(ewei, ewei, 'same')
plt.plot(grid, t)
plt.show()
我对卷积分布有很好的了解