numpy数组乘以10得到错误的结果

时间:2017-08-19 08:59:14

标签: python numpy

我对python2.7 numpy数组进行了非常有线的测试。请看这段代码。

import numpy as np
times = np.arange(5., 85, 0.1)
print times
times = np.array(times * 10, dtype=np.int)
print times

原始times应为[5.0 ~ 84.9]。乘以10后,它应该变为[50 ~ 849],但结果如下:

[ 50 51 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 ... ]
5150

之间有两个52

1 个答案:

答案 0 :(得分:3)

问题是,您的第三个条目不完全是52.0,而是51.999999999999993(请参阅Is floating point math broken?)。因此,截断该值会导致51

正确的方法是首先对值进行舍入。 (正如在Safest way to convert float to integer in python?中指出的那样,所有足够小的整数都可以精确地表示为浮点数。)因此,您必须计算:times = np.array(np.round(times * 10), dtype=np.int)