【发布时间】:2015-04-27 09:03:42
【问题描述】:
我有一个值数组,并使用 numpy.histogram 创建了数据的直方图,如下所示:
histo = numpy.histogram(arr, nbins)
其中 nbins 是从数据范围 (max-min) 除以所需的 bin 宽度得出的 bin 数。
根据输出,我使用以下方法创建了一个累积分布函数:
cdf = np.cumsum(histo[0])
normCdf = cdf/np.amax(cdf)
但是,我需要一个与原始数组 (arr) 中的值相对应的 normCdf 值数组。例如,如果原始数组 arr 中的值接近 arr 的最小值,则其对应的 normCdf 值将很高(即 0.95)。 (在本例中,当我处理雷达数据时,我的数据以分贝为单位,为负数。因此,CDF 达到最大值时为最小值。)
从概念上讲,我正在努力实现一个数组,其中数组中的每个值在 CDF 下都有对应的值(normCdf 值)。任何帮助,将不胜感激。带有 cdf 的直方图如下。
【问题讨论】:
-
这里有几点需要注意:
np.histogram有一个density关键字,您可能希望将其用于经验累积密度。图中的红色曲线不是cdf,而可能是1-cdf。使用cumsum是正确的方法,但是您会得到一个函数,将每个 bin 的位置映射到累积密度。 -
我查看了密度选项,但它返回的是 pdf 而不是 cdf,其中曲线下面积的积分为 1,而不是累计总数。我很高兴我有我需要的正确值,但我想使用原始数组索引它们
-
最简单的方法可能是使用 statsmodels 中的经验累积密度函数实现:statsmodels.sourceforge.net/0.6.0/generated/…
-
解决了它遍历原始数组中的值并计算 (originalArray - minOfOriginalArray)/binwidth 并使用结果来索引 CDF 数组
-
@NathanThomas 您介意详细说明您的解决方案吗?
标签: python arrays numpy statistics