【问题标题】:Get original data array from probability density values and bins of numpy histogram从概率密度值和numpy直方图的bin中获取原始数据数组
【发布时间】:2014-07-21 06:07:49
【问题描述】:

我的目的是根据np.histogram函数的概率密度和bin信息来计算原始数据数组。

例如:

import random
a = random.sample(xrange(100), 50)
n, bin = np.histogram(a,bins=100,range=(-10,10), normed=True)

我想从 n 和 bin 中得到一个。我使用了 np.digitize,但它似乎不是正确的解决方案。

实际上,我最初的目的是根据该直方图计算原始数据的偏度和峰度。所以,我试图将 n 和 bin 转换为原始数据。如果能直接从直方图中得到偏度和峰度就完美了。

感谢 user3823992,我尝试使用 scipy.stats.rv_discrete 函数从 bin 和概率密度函数中获取偏度和峰度。 我编辑的代码是:

a = random.sample(xrange(100), 50)
n, bin = np.histogram(a,bins=100,range=(-10,10), normed=True)
b2=bin[:-1]
print np.mean(a), np.var(a), sp.skew(a),sp.kurtosis(a)
dist = sp.rv_discrete(values=(b2,n))
print dist.stats(moments='mvsk')

但是,np.mean(a)、np.var(a)、sp.skew(a)、sp.kurtosis(a) 和 dist.stats(moments='mvsk') 的结果相差太大.根据 scipy.stats.rv_discrete 的文档,“values”中的两个元组之一应该是具有整数的点(在本例中为 b2),另一个(在本例中为 n)的总和应为 1。 问题是我的 b2 中的数字不是整数,并且“n”的总和也不是 1。 我将 bin 宽度乘以 n 并再次尝试。但是还是不行。

任何想法或帮助将不胜感激。 最好的问候,

胡尼尔

【问题讨论】:

  • 与其提出新问题,不如编辑和改进这个问题。考虑阅读the Help Center 中提供的材料。

标签: python statistics scipy histogram reverse


【解决方案1】:

scipy.stats.rv_discrete 为您服务。它将帮助您从数据中创建一个随机分布类。结果将有一大堆方便的方法。 .stats 方法将为您提供前四个时刻。如果您不指定,它只会返回均值 (m) 和方差 (v)。

b2=bin[:-1]
print mean(a), var(a), scipy.stats.skew(a)
dist = scipy.stats.rv_discrete(values=(b2,n))
print dist.stats(moments='mvsk')

以上内容应与您的代码兼容。只需重新组织以利用输出。

【讨论】:

  • @user3823992 非常感谢您的帮助。
  • 感谢您的帮助。我检查了 scipy.stats.rv_discrete() 的文档。根据该文档,对于值中的两个元组((xk,pk),xk 应该是整数,pk 的总和应该是 1,但我的 b2 和 n 不是那样的。我不确定这是否是问题,但无论如何原始数据的均值、方差、偏度和峰度与 dist.stats 中的值不匹配。您对此有什么想法吗?谢谢,Isaac
猜你喜欢
  • 2011-05-11
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2012-11-09
相关资源
最近更新 更多