我想使用SciPy的去卷积函数来找到两个高斯分布的未知分布.在SciPy中没有与此功能相关的文档,所以我只是在寻找一个关于如何在我的情况下使用此功能的示例.例如,给定两个正态分布N(100,1),N(300,2),我想了解我怎样才能找到去卷积n的分布(200,1).
>>> sample1 = np.round(scipy.around(scipy.stats.norm(100, 1).rvs(size=1000)))
>>> sample2 = np.round(scipy.stats.norm(300, 2).rvs(size=2000))
>>> signal.deconvolve(sample1, sample2)
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了负值,这似乎是错误的.如何从此反卷积中恢复分布N(200,1)?特别是,我认为我的问题是我不明白如何得到除数.
我真正想要看的是如何使用SciPy的反卷积从这些样本中恢复~N(200,1)的示例.
我认为你是一个有点困惑的您的期望......因为我们都知道,两个普通的卷积分布是指平均值的总和另一个正态分布,方差方差之和,你似乎想到的是,两个正常随机样本的卷积也将是正常的随机样本.事实并非如此:
a = scipy.stats.norm(100, 1).rvs(size=1000)
b = scipy.stats.norm(200, 1).rvs(size=1000)
c = scipy.convolve(a, b)
plt.subplot(311)
plt.hist(a, bins=50)
plt.subplot(312)
plt.hist(a, bins=50)
plt.subplot(313)
plt.hist(a, bins=50)
Run Code Online (Sandbox Code Playgroud)

您可能正在考虑以下方面的内容:
a = scipy.stats.norm(100, 10).pdf(np.arange(500))
b = scipy.stats.norm(200, 20).pdf(np.arange(500))
c = scipy.convolve(a, b)
m_ = max(a.max(), b.max(), c.max())
plt.subplot(311)
plt.axis([0, 1000, 0, 1.25*m_])
plt.plot(a)
plt.subplot(312)
plt.axis([0, 1000, 0, 1.25*m_])
plt.plot(b)
plt.subplot(313)
plt.axis([0, 1000, 0, 1.25*m_])
plt.plot(c)
Run Code Online (Sandbox Code Playgroud)

在任何情况下,又回到了deconvolve...如果你长的两个数组调用它m和n,它会回报你一个元组有两个数组:
m - n + 1是去卷积数组,即你应该用第二个数据卷积的数组,得到第一个m是用第一个返回的第二个数字卷积替换第一个数组时的错误.| 归档时间: |
|
| 查看次数: |
3851 次 |
| 最近记录: |