python中的范围行为和numpy中的arange

时间:2012-09-20 00:23:50

标签: python numpy range

有人可以解释下面的'-5'。 我对numpy有些新意,但这似乎很奇怪

In [112]: an_int=9

In [113]: an_int/2
Out[113]: 4

In [114]: range(-an_int/2,an_int/2)
Out[114]: [-5, -4, -3, -2, -1, 0, 1, 2, 3]

In [115]: arange(-an_int/2,an_int/2)
Out[115]: array([-5, -4, -3, -2, -1,  0,  1,  2,  3])

In [116]: range(-4,4)
Out[116]: [-4, -3, -2, -1, 0, 1, 2, 3]

1 个答案:

答案 0 :(得分:7)

问题不是那么笨拙。 “问题”是python中的整数除法将结果与截断0相反(如C语言) - 例如-9/2 被解析为(-9)/2 (如果您使用的是python3.x,则为(-9)//2)评估为-5。另一方面,内置int函数会截断为零。换句话说:

a = -9
b = 2
print a//b #-5
print int(float(a)/b) #-4

如果你有兴趣。这是Guido讨论这个有趣(也许有点争议)的设计决定的blog post