我正在尝试为 N 个离散分数的分布创建一个 N+1 个 bin 的数组。
我假设 numpy 的 arange
可以用于此目的。然而,该函数给出了奇数值,这对生成的 numpy 直方图有显着影响。这是一个最小的例子:
n = 10
a = np.arange(0, 1.01 + 1/n, 1/n)
print(a)
for i in a:
print(i)
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1.1]
0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6000000000000001
0.7000000000000001
0.8
0.9
1.0
1.1
简单地打印数组输出看似正常的值这一事实更具误导性。如果我想使用这个数组作为bins
,这是一个大问题。 numpy 的参数 histogram()
函数,因为我的值是 k/10 小数。特别是,所有值为 0.7 的数据点将被放置在 [0.6000000000000001, 0.7000000000000001]
中。 bin,而我希望它们在 [0.7, 0.8]
里面,根据 np.histogram() 文档。
问题是这是一个错误还是一个功能。
最佳答案
这与 numpy 完全无关,这些数字的二进制表示在计算机世界中并不精确。
例如0.3无法用有限数字表示。这就是为什么您会得到这些结果,这些结果接近您的期望,但并不完全正确。
当你看到这个时,你会感到惊讶:
>>> print('{:.50}'.format(0.3))
0.2999999999999999888977697537484345957636833190918
关于python - np.arange 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50044373/