2017-10-20 24 views
0

je tentais des choses dans PyCharm j'ai donc écrit un simple morceau de code comprenant:np.arange() ne peut pas être carré correctement

xlist = np.arange(99995,99996) 
print(xlist*xlist) 
>>> array([1409065433]) 

Comme vous pouvez le voir, la réponse est incorrecte! Je devrais obtenir 9999000025. Je suis tombé sur cela parce que je l'ai écrit à l'origine:

xlist = np.arange(0,100000) 

for x in xlist: 
    print(x) 
    z = x * x 
    print(z) 
print(xlist*xlist) 

et a obtenu de nombreux résultats étranges, y compris valeurs négatives pour x autour de 90000.

Trois de mes amis testé ce morceau de code et deux ont obtenu les mêmes résultats que moi (sur Windows) et l'autre a eu raison, sous Linux, donc ça semble être dépendant du système d'exploitation ...

Quelqu'un sait ce qui se passe?

+2

Les nombres Python3 sont de précision arbitraire. Les nombres entiers sont de 32 ou 64 bits par défaut, donc ils ne peuvent pas être arbitrairement grands et des débordements peuvent se produire. –

+2

Précisez: 'dtype = np.int64' avant de faire cela. –

+0

@AndrasDeak: Pas nécessairement 64 bits. Cela dépend de la plate-forme. – user2357112

Répondre

3

9999000025 ne convient pas à un int 32 bits Contrairement aux ints Python standard, les types de données NumPy sont de taille fixe et les valeurs qu'ils peuvent contenir sont limitées. La solution ici serait de spécifier dtype=np.int64.

x = np.arange(99995,99996, dtype=np.int64) 
print(x * x) 
Out[155]: array([9999000025])