2016-07-11 5 views
7

Я запускаю тот же самый код как для Windows, так и для Mac, с python 3.5 64 бит.«OverflowError: Python int too large to convert to C long» на окнах, но не mac

На окнах, это выглядит следующим образом:

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

Однако штраф этот код работает на моем компьютере. Может ли кто-нибудь объяснить причину или дать решение для кода на окнах? Спасибо!

+0

Вы уверены, что оба 64-битного? можете ли вы протестировать на linux? – Tim

+0

Даже если обе системы находятся на 64-битном Python, они оба находятся на 64-битном NumPy? – user2357112

+0

Другой вопрос об использовании stackoverflow объясняет «почему». В Windows длинная 32-битная и на Unux-подобной длине 64 бит. См. Вопрос http://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows – VladimirM

ответ

10

Вы получите эту ошибку, как только ваши номера больше 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 

Вы можете подтвердить это путем проверки:

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

Для того, чтобы числа с большей точностью, не проходят тип int, который использует ограниченное число C за кулисами. Использовать поплавок по умолчанию:

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

если у вас есть номер больше этого, как решить? –

+1

@VeronicaWenqianCheng Не передавать int dtype, использовать поплавок по умолчанию. –

+0

спасибо! да хранится как плавающий –