Numpy 直方图表示具有相同近似值的浮点数

2024-03-20

我有代码可以在给定范围 [0,1) 的情况下生成从 -10 到 10 的特定值 该代码采用 -10 到 10 之间的值,并根据其概率将其附加到列表中。例如,-10 将在列表中放入 0 次,因为它对应于值 0,而 10 将在列表中放入 100 次(作为标准化),因为它对应于范围中的 1。

这是代码:

#!/usr/bin/env python

import math
import numpy as np
import matplotlib.pyplot as plt

pos = []
ceilingValue = 0.82
pValues = np.linspace(0.00, ceilingValue, num=100*ceilingValue)

for i in xrange(int(100*ceilingValue)):
    p = pValues[i]
    y = -11.63*math.log(-2.36279*(p - 1))
    for j in xrange(i):
        pos.append(y)

avg = np.average(pos)    
std = np.std(pos)    

hist, bins = np.histogram(pos,bins = 100)
width = 0.7*(bins[1]-bins[0])
center = (bins[:-1]+bins[1:])/2
plt.bar(center, hist, align = 'center', width = width)
plt.show()  

问题是直方图将生成准确的图,但某些值会破坏趋势。例如,-5.88 对应于频率计数中的大约 30 个条目,约为 70。我认为 python 会看到这两个值并将它们简单地集中在一起,但我不知道如何修复它。但如果只是直方图出了问题,那就没关系,我真的不需要它。我只需要这份清单,如果它一开始就是正确的。


我认为根本问题是你的 bin 大小是统一的,而唯一值之间的差异pos呈指数级扩展。因此,您总是会遇到奇怪的“尖峰”,其中两个附近的唯一值落入同一个容器中,或者有很多空容器(特别是如果您只是增加容器计数以消除“尖峰”)。

您可以尝试根据中的实际唯一值设置垃圾箱pos,因此它们的宽度不均匀:

 # the " + [10,]" forces the rightmost bin edge to == 10
 uvals = np.unique(pos+[10,])
 hist, bins = np.histogram(pos,bins=uvals)
 plt.bar(bins[:-1],hist,width=np.diff(bins))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Numpy 直方图表示具有相同近似值的浮点数 的相关文章

随机推荐