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

Tus*_*nna 3 python numpy

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

import numpy as np
x = np.arange(0.5, 10.4, 0.8, int)
Run Code Online (Sandbox Code Playgroud)

它输出:

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 ]
Run Code Online (Sandbox Code Playgroud)

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

[ 0  1  2  3  4  5  6  7  8  9 10 ]
Run Code Online (Sandbox Code Playgroud)

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

x = np.arange(0.5, 10.4, 0.8)
print(x)
Run Code Online (Sandbox Code Playgroud)

它打印:

[  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 ]
Run Code Online (Sandbox Code Playgroud)

use*_*ica 8

这是一种非常奇怪的召唤方式arange.这种行为没有记录,我认为没有太多考虑.这是基于的情况,至少在当前版本中会发生什么.

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

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

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