我想利用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)上面的代码给出了负值,这似乎是错误的。如何从反褶积中恢复N(200,1)的分布?特别是,我认为我的问题是,我不知道如何得到除数。
我真正想要看到的是一个例子,说明如何使用SciPy的反褶积从这些样本中恢复~ N(200,1)。
发布于 2013-03-18 19:26:52
我觉得你对自己的期望有点困惑.既然我们都知道,两个正态分布分布的卷积是另一个正态分布,均值之和是均值,方差是方差之和,那么你似乎期望两个正态分布随机样本的卷积也是一个正态随机样本。但事实并非如此:
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)

你可能会想到这样的想法:
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)

无论如何,回到deconvolve.如果使用长度为m和n的两个数组调用它,它将返回一个包含两个数组的元组:
m - n + 1是反卷积数组,即您应该与第二个数组进行卷积,以获得第一个数组。m是将第一个数组替换为第一个返回数组的第二个卷积的错误。https://stackoverflow.com/questions/15483346
复制相似问题