我在windows和mac上运行完全相同的代码,用python3.564位。
在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上的代码给予一个解决方案吗?非常感谢!
5条答案
按热度按时间tv6aics11#
当你的数字大于
sys.maxsize
时,你会得到这个错误:您可以通过检查确认:
要获得更高精度的数字,不要传递一个int类型,它在幕后使用一个有界的C整数。使用默认的浮点数:
bogh5gae2#
您可以使用
dtype=np.int64
而不是dtype=int
cbwuti443#
有人能解释一下原因吗
Numpy数组通常 * 具有固定大小的元素,包括各种大小的整数,单精度或双精度浮点数,固定长度字节和Unicode字符串以及由上述类型构建的结构。
在Python 2中,python“int”相当于C long。在Python 3中,“int”是一种任意精度类型,但numpy在创建数组时仍然使用“int”来表示C类型“long”。
C long的大小取决于平台。在Windows上,它总是32位。在类Unix系统上,它通常在32位系统上是32位,在64位系统上是64位。
还是给予Windows上的代码一个解决方案?非常感谢!
选择大小与平台无关的数据类型。你可以在www.example.com找到这个列表https://docs.scipy.org/doc/numpy/reference/arrays.scalars.html#arrays-scalars-built-in,最明智的选择可能是np.int64
nmpmafwu4#
转换为float:
以上失败,错误:
现在尝试使用float转换:
cld4siwp5#
我在尝试将对象类型列(实际上是字符串)转换为整数类型时也遇到了同样的错误。
这不起作用:
这样做奏效了: