我对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 ... ]
51
和50
52
答案 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)