2016-07-11 38 views
7

Uruchomiłem dokładnie ten sam kod w obu oknach i macach, z pythonem 3.5 64-bitowym."OverflowError: Python int jest zbyt duży, aby przekonwertować na C long" w oknach, ale nie w wersji Mac

Na okien, wygląda to tak:

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

Jednak ten kod działa poprawnie na moim mac. Czy ktoś mógłby pomóc wyjaśnić, dlaczego lub podać rozwiązanie dla kodu w systemie Windows? Dzięki wielkie!

+0

Jesteś pewien, że oba są 64-bitowe? możesz testować na Linuksie? – Tim

+0

Nawet jeśli oba systemy są w 64-bitowym Pythonie, czy oba są na 64-bitowej NumPy? – user2357112

+0

Kolejne pytanie stackoverflow wyjaśnia "dlaczego". Na Windowsie long jest 32-bitowy, a na Unux-like long jest 64-bitowy. Zobacz pytanie http://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows – VladimirM

Odpowiedz

10

Dostaniesz ten błąd raz numery są większe niż 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 

Można to potwierdzić poprzez sprawdzenie:

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

Aby wziąć numery z większą precyzją, nie przechodzą typ int, w którym za kulisami użyto ograniczonej liczby całkowitej C. Użyj wartości domyślnej:

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

jeśli otrzymasz numer większy niż ten, jak rozwiązać? –

+1

@VeronicaWenqianCheng Nie należy przekazywać typu int dtype, należy użyć domyślnej wartości float. –

+0

dzięki! tak trzymane jak pływak –