Python matplotlib 历史计数不正确

Python matplotlib hist counts incorrect

如果我遇到此处所述的浮点精度问题,有人可以给我提示吗: 或者我在这里遗漏了什么??

import numpy
import matplotlib.pyplot as plt    

frame = numpy.array([0.9, 0.99, 1, 1.9, 1.99, 2])

MyBins = numpy.linspace(0, 100, 1000, endpoint=False) 
(counts, bins, bars) = plt.hist(frame, bins = MyBins)

Output counts:
       0
...    ...
8      0.0
9      2.0
10     1.0
...    ...
18     1.0
19     1.0
20     1.0

0.9 和 0.99 的计数应为 2,1.9 和 1.99 的计数也应为 2。但是,1.9 被算作 1.8 值...如果这是一个浮动精度问题,我该怎么做才能解决它?

谢谢!

如果您以高精度打印数字,它们会变成类似:'0.1000000000000000055511151''1.8999999999999999111821580'。所以是的,浮点精度可能是问题所在。移动您的 bin 边界可能是一个解决方案。

通常情况下,具有相同精度的浮点数应该比较相等并且表现符合预期。如果您的值和直方图使用不同的精度,您可能会得到这样的意外结果。您可能会尝试找出直方图使用的精度并将其用于您的值。

示例:

frame = numpy.array([0.9, 0.99, 1, 1.9, 1.99, 2], dtype=numpy.float32)