2016-07-11 93 views
7

Sto eseguendo lo stesso codice esatto su Windows e Mac, con Python 3.5 64 bit."OverflowError: Python int troppo grande per convertire in C long" su Windows ma non mac

Su Windows, sembra che questo:

>>> 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 

Tuttavia, questo codice funziona bene sul mio mac. Qualcuno potrebbe aiutare a spiegare perché o dare una soluzione per il codice su Windows? Grazie mille!

+0

Sei sicuro che entrambi siano a 64 bit? puoi testare su linux? – Tim

+0

Anche se entrambi i sistemi sono su Python a 64 bit, sono entrambi su NumPy a 64 bit? – user2357112

+0

Un'altra domanda StackOverflow spiega "perché". Su Windows long è a 32 bit e su Unux-like long è a 64 bit. Per favore vedi la domanda http://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows – VladimirM

risposta

10

Otterrete questo errore una volta i numeri sono superiori 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 

È possibile confermare questa controllando:

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

Per prendere i numeri con una precisione maggiore, non passano un tipo int che utilizza un intero C limitato dietro le quinte. Usa il float predefinito:

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

se ottieni un numero più grande di questo, come affrontare? –

+1

@VeronicaWenqianCheng Non passare un tipo di dati int, utilizzare il float predefinito. –

+0

grazie! sì mantenuto come galleggiante –