2016-07-11 11 views
7

Ich benutze den exakt gleichen Code auf beiden Windows und Mac, mit Python 3.5 64 Bit."OverflowError: Python int zu groß, um in C lang zu konvertieren" auf Windows, aber nicht Mac

Auf Fenster, sieht es wie folgt aus:

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

Doch dieser Code funktioniert auf meinem Mac in Ordnung. Kann jemand helfen, warum zu erklären oder eine Lösung für den Code auf Windows zu geben? Vielen Dank!

+0

Sie sind sicher, dass beide 64 Bit sind? Können Sie auf Linux testen? – Tim

+0

Auch wenn beide Systeme 64-Bit-Python sind, sind sie beide auf 64-Bit-NumPy? – user2357112

+0

Eine weitere Stackoverflow-Frage erklärt "Warum". Unter Windows ist lange 32bit und auf Unux-like ist 64bit. Bitte beachten Sie die Frage http://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows – VladimirM

Antwort

10

Sie werden diese Fehler erhalten, wenn Ihre Zahlen, die größer sind als 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 

Sie dies durch Überprüfung bestätigen kann:

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

Zahlen mit größerer Genauigkeit zu nehmen, nicht passieren ein Int-Typ, der hinter den Kulissen eine beschränkte C-Ganzzahl verwendet. Verwenden Sie den Standard-Float:

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

Wenn Sie eine Nummer größer als das bekommen, wie man anpackt? –

+1

@VeronicaWenqianCheng Übergeben Sie keinen int dtype, verwenden Sie den Standard-Float. –

+0

danke! ja als float gehalten –

Verwandte Themen