2012-09-20 1 views
2

Quelqu'un peut-il s'il vous plaît expliquer le «-5» ci-dessous. Je suis un peu nouveau pour numpy, mais cela semble bizarreComportement de gamme en python et arange en 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] 

Répondre

7

Le problème n'est pas numpy. Le "problème" est que la division entière dans python planifie le résultat par opposition à la troncature vers 0 (comme le langage C) - par ex. -9/2qui est analysé comme (-9)/2 (ou (-9)//2 si vous utilisez python3.x) évalue à -5. D'autre part, la fonction int intégrée tronque vers zéro. En d'autres termes:

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

Si vous êtes intéressé. Voici un blog post par Guido discutant de cette décision de conception intéressante (et peut-être un peu controversée).

+1

De plus, l'opérateur unaire '-' a [priorité supérieure] (http://docs.python.org/reference/expressions.html#summary) sur'/'. Donc '-a/b' est' (-a)/b', pas '- (a/b)'. – Avaris

+0

@Avaris - bon point. – mgilson