首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SciPy反褶积函数

SciPy反褶积函数
EN

Stack Overflow用户
提问于 2013-03-18 17:42:19
回答 1查看 5.1K关注 0票数 8

我想利用SciPy的反卷积函数找到一个未知分布,给出两个高斯分布。没有任何文件与SciPy中的这个函数相关联,所以我只想找一个例子,说明如何在我的情况下使用这个函数。例如,给定两个正态分布N(100,1),N(300,2),我想了解如何求出反褶积N(200,1)的分布。

代码语言:javascript
复制
>>> 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)。

EN

回答 1

Stack Overflow用户

发布于 2013-03-18 19:26:52

我觉得你对自己的期望有点困惑.既然我们都知道,两个正态分布分布的卷积是另一个正态分布,均值之和是均值,方差是方差之和,那么你似乎期望两个正态分布随机样本的卷积也是一个正态随机样本。但事实并非如此:

代码语言:javascript
复制
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)

你可能会想到这样的想法:

代码语言:javascript
复制
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.如果使用长度为mn的两个数组调用它,它将返回一个包含两个数组的元组:

  • 长度的第一个m - n + 1是反卷积数组,即您应该与第二个数组进行卷积,以获得第一个数组。
  • 长度的第二个m是将第一个数组替换为第一个返回数组的第二个卷积的错误。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15483346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档