web-dev-qa-db-fra.com

"OverflowError: Python int trop grand pour être converti en C long" sous Windows mais pas sous mac

J'utilise exactement le même code sous Windows et Mac, avec Python 3.5 64 bits. 

Sur Windows, cela 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 bien sur mon mac. Quelqu'un pourrait-il aider à expliquer pourquoi ou à donner une solution pour le code sur Windows? Merci beaucoup!

14
packybear

Vous obtiendrez cette erreur une fois que vos nombres seront 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 le confirmer en vérifiant:

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

Pour prendre des nombres avec une plus grande précision, ne passez pas un type int qui utilise un entier C lié en coulisse. Utilisez le float par défaut:

>>> preds = np.zeros((1, 3))
15
Moses Koledoye

Vous pouvez utiliser dtype = np.int64 au lieu de dtype = int

0
sammy ongaya