【发布时间】:2017-11-24 09:17:52
【问题描述】:
当我将矩阵中的数字转换为np.float32 时,值会稍作修改:
In [1]: matrix_32 = np.asarray([
...: [0.7, 3],
...: [1.7, 2],
...: [0.7, 9]
...: ], dtype=np.float32)
In [2]: matrix_32
Out[2]:
array([[ 0.69999999, 3. ],
[ 1.70000005, 2. ],
[ 0.69999999, 9. ]], dtype=float32)
但是,当我将数字转换为 np.float64 时,值会按预期显示:
In [3]: matrix_64 = np.asarray([
...: [0.7, 3],
...: [1.7, 2],
...: [0.7, 9]
...: ], dtype=np.float64)
In [4]: matrix_64
Out[4]:
array([[ 0.7, 3. ],
[ 1.7, 2. ],
[ 0.7, 9. ]])
有人能解释为什么会这样吗?
【问题讨论】:
-
我建议你阅读一些浮点运算的介绍,例如en.wikipedia.org/wiki/Floating-point_arithmetic
-
问题不仅在于引入的不准确性,还在于
np.float32和np.float64似乎对它们的对象有不同的__repr__实现。 -
我知道我们得到了很多浮点问题,这些问题很容易通过了解一些基本的浮点属性来回答,但是将问题标记为重复应该意味着它们是完全重复的。它不应用于在不提供答案的情况下转移广泛类别的问题。这个问题不是the purported original的重复问题。
标签: python numpy floating-point