我是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 ]
答案 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之间的整数填充数组。