Numpy astype四舍五入到错误的值

时间:2017-05-11 08:38:04

标签: python arrays numpy

所以我试图将我的浮动numpy数组转换为整数。但是当我这样做时:

array.astype(np.uint64)

它改变了这个数组:

[ 550.  514.  451.  494.  490.  500.  ...]

到这一个:

[549 513 450 493 489 499 ... ]

所以,我想知道你们中是否有人知道为什么会这样?我必须得到np.uint64作为我接下来使用的代码的输出。

提前谢谢。

1 个答案:

答案 0 :(得分:4)

正如在评论中所说,转换为整数不会舍入,它只是截断非整数部分。在控制台输出中显示为550.的浮动实际上可能是549.999999999,它将被截断为549。在类型转换之前使用舍入。一个例子:

>>> a = np.array([5, 6, 7], dtype=float) - 1e-12
>>> a
array([ 5.,  6.,  7.])
>>> a.astype(np.uint64)
array([4, 5, 6], dtype=uint64)
>>> np.around(a).astype(np.uint64)
array([5, 6, 7], dtype=uint64)