提问者:小点点

"溢出错误:Pythonint太大,无法转换为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上的代码提供解决方案吗?非常感谢!


共3个答案

匿名用户

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

匿名用户

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

匿名用户

谁能解释一下为什么

Numpy数组通常*具有固定大小的元素,包括各种大小的整数、单精度或双精度浮点数、固定长度的字节和Unicode字符串以及由上述类型构建的结构。

在Python2中,python"int"等价于C long。在Python3中,"int"是一个任意精度的类型,但是numpy在创建数组时仍然使用"int"来表示C类型"long"。

C long的大小取决于平台。在Windows上它始终是32位的。在类unix系统上,它通常在32位系统上是32位,在64位系统上是64位。

或者给出windows上代码的解决方案?非常感谢!

选择一个大小与平台无关的数据类型。您可以在https://docs.scipy.org/doc/numpy/reference/arrays.scalars.html#arrays-scalars-built-in找到列表,最明智的选择可能是np. int64

*Numpy确实允许python对象数组,但我认为它们没有被广泛使用。

相关问题