gpt4 book ai didi

python - numpy `rint` 奇怪的行为

转载 作者:行者123 更新时间:2023-11-28 21:03:09 26 4
gpt4 key购买 nike

这个问题是关于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
...

所以似乎有一个规律:如果在除以 10 后,个位是偶数,则数字向下舍入,但如果个位是奇数,则数字向上舍入。然而,根据rounding rules ,单位位置应该无关紧要!

要么 numpy 应该使用“向上舍入”,即恰好在一半处向上舍入到下一个整数,要么应该使用“向下舍入”。它不能两者兼顾,而且不一致。

通常,我会为此打开一个带有 numpy 的错误报告,但我不确定这是否完全是 numpy 很奇怪,或者 python 的一些潜在怪癖解释 float ,或由于 loss of precision from conversion to binary and back .

请注意 numpy.round(i, 0) 的行为也相同。


一个解决方法是在除以 10 之后添加一个小分数:numpy.rint(i/10 + 0.1),答案就正确了。

最佳答案

自从几乎普遍采用 IEEE 754 标准以来,数字函数已涌向“四舍五入”,其描述可以在您链接到的同一维基百科页面上找到,但是 a bit down .

在这里,基本转换期间的精度损失不是问题,因为在此范围内整数到 float (C double )的转换是准确的,并且商可以用二进制 float 精确表示。

添加 0.1 不是明智的解决方法。例如,将 0.1 添加到 4.42 得到 4.52,四舍五入为 5.0 而不是正确的 4.0。

关于python - numpy `rint` 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46877403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com