Kar*_*tik 2 python numpy python-3.x
这个问题是关于numpy.rint,根据定义,该值将四舍五入到最接近的整数。但是,以下代码会产生不一致的结果。
In [1]: import numpy as np
for i in range(5, 105, 10):
print(i, np.rint(i/10))
Out[1]: 5 0 # Should be 1
15 2 # Correct
25 2 # Should be 3
35 4 # Correct
45 4 # Should be 5
55 6 # Correct
65 6 # Should be 7
...
Run Code Online (Sandbox Code Playgroud)
因此,似乎存在一种模式:如果除以10后,单位位置是偶数,则将数字四舍五入,但如果单位位置是奇数,则将数字四舍五入。但是,根据四舍五入规则,单位位置应该没有关系!
要么numpy使用“四舍五入”,即正好一半,四舍五入到下一个整数,要么使用“四舍五入”。它不能同时做到,而且前后不一致。
通常,我会为此打开一个错误报告numpy,但是我不确定这是numpy不是很奇怪,或者是关于python解释浮点数的一些潜在的怪癖,还是由于转换到二进制和返回时的精度损失。
请注意,numpy.round(i, 0)其行为也相同。
解决方法是在除以10:之后添加一小部分numpy.rint(i/10 + 0.1),然后答案正确。