2016-07-11 4 views
7

Je cours exactement le même code sur les deux fenêtres et mac, avec python 3.5 64 bits."OverflowError: Python int trop grand pour convertir en C long" sur Windows mais pas mac

Sur les fenêtres, il ressemble à ceci:

>>> import numpy as np 
>>> preds = np.zeros((1, 3), dtype=int) 
>>> p = [6802256107, 5017549029, 3745804973] 
>>> preds[0] = p 
Traceback (most recent call last): 
    File "<pyshell#13>", line 1, in <module> 
    preds[0] = p 
OverflowError: Python int too large to convert to C long 

Cependant, ce code fonctionne très bien sur mon mac. Quelqu'un pourrait-il aider à expliquer pourquoi ou donner une solution pour le code sur Windows? Merci beaucoup!

+0

Vous êtes sûr que les deux sont 64 bits? pouvez-vous tester sur Linux? – Tim

+0

Même si les deux systèmes sont sur Python 64 bits, sont-ils tous les deux sur NumPy 64 bits? – user2357112

+0

Une autre question de stackoverflow explique «pourquoi». Sur Windows long est 32bit et sur Unix-like long est 64bit. S'il vous plaît voir la question http://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows – VladimirM

Répondre

10

Vous obtiendrez cette erreur une fois que vos chiffres sont supérieurs à sys.maxsize:

>>> p = [sys.maxsize] 
>>> preds[0] = p 
>>> p = [sys.maxsize+1] 
>>> preds[0] = p 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
OverflowError: Python int too large to convert to C long 

Vous pouvez confirmer cela en vérifiant:

>>> import sys 
>>> sys.maxsize 
2147483647 

Prendre des nombres avec une précision plus grande, ne passent pas un type int qui utilise un entier C borné derrière les scènes. Utilisez le flotteur par défaut:

>>> preds = np.zeros((1, 3)) 
+1

si vous obtenez un nombre plus grand que celui-ci, comment s'attaquer? –

+1

@VeronicaWenqianCheng Ne passez pas un int dtype, utilisez le float par défaut. –

+0

merci! oui gardé comme flotteur –