“OverflowError:Python int 太大而无法转换为 C long”在 Windows 但不是 mac

新手上路,请多包涵

我在 windows 和 mac 上运行完全相同的代码,使用 python 3.5 64 位。

在 Windows 上,它看起来像这样:

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

但是,此代码在我的 Mac 上运行良好。任何人都可以帮助解释原因或为 Windows 上的代码提供解决方案吗?非常感谢!

原文由 packybear 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3k
2 个回答

一旦你的数字大于 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

要获取更高精度的数字,请不要传递在幕后使用有界 C 整数的 int 类型。使用默认浮动:

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

原文由 Moses Koledoye 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 dtype=np.int64 而不是 dtype=int

原文由 sammy ongaya 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进