python - np.arange 的奇怪行为

标签 python numpy precision

我正在尝试为 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/

相关文章:

python - nose 中有 self.assertNotEqual() 的快捷方式吗?

python - 如何更改seaborn中因子图的顺序

python - numpy数组: First occurence of N consecutive values smaller than threshold

c++ - gcc 版本之间的舍入差异

go - golang中小数平方根的任意精度

python - 删除python中列表的单词互换元素

python - 合并2个数据框

python - Numpy:扁平化字典

python - Pandas 中的矢量化操作

python - 恢复标准化操作时的精度问题