numpy - arange:为什么以下示例不会在10结束

时间:2017-07-04 05:52:37

标签: python numpy

我是Python的初学者。努力学习numpy。

import numpy as np
x = np.arange(0.5, 10.4, 0.8, int)

输出:

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 ]

我期待它返回(最后一项是10.4):

[ 0  1  2  3  4  5  6  7  8  9 10 ]

除此之外,如果我执行此(理解这个例子):

x = np.arange(0.5, 10.4, 0.8)
print(x)

打印:

[  0.5  1.3  2.1  2.9  3.7  4.5  5.3  6.1  6.9  7.7  8.5  9.3  10.1 ]

1 个答案:

答案 0 :(得分:8)

调用arange这是一种非常奇怪的方式。这种行为没有记录,我认为没有太多考虑。至少在当前版本中,基于source发生了什么。

使用您传递的原始参数,0.5,10.4和0.8,NumPy使用_calc_length辅助函数计算结果的长度和第二个元素。这些计算在Python对象算术中完成,长度转换为npy_intp整数。在您的情况下,长度计算为13。

NumPy然后分配所请求的数据类型和计算长度的数组,并将前两个元素存储在数组中。当元素被存储时,它们经历通常的NumPy dtype转换。在您的情况下,前两个元素被强制为0和1。

最后,NumPy调用新数组的fill函数,用前两个元素计算的值填充数组。 fill函数重新计算前两个元素的步骤,因此它计算步长为1并使用0到12之间的整数填充数组。