gpt4 book ai didi

python - pandas/numpy int64 中意外的 32 位整数溢出(python 3.6)

转载 作者:太空狗 更新时间:2023-10-29 20:25:06 26 4
gpt4 key购买 nike

让我从示例代码开始:

import numpy
from pandas import DataFrame

a = DataFrame({"nums": [2233, -23160, -43608]})

a.nums = numpy.int64(a.nums)

print(a.nums ** 2)
print((a.nums ** 2).sum())

在我的本地机器和其他开发人员的机器上,这按预期工作并打印出来:

0       4986289
1 536385600
2 1901657664
Name: nums, dtype: int64
2443029553

但是,在我们的生产服务器上,我们得到:

0       4986289
1 536385600
2 1901657664
Name: nums, dtype: int64
-1851937743

这是 32 位整数溢出,尽管它是 int64。

生产服务器使用相同版本的 python、numpy、pandas 等。它是 64 位 Windows Server 2012 操作系统,所有内容都报告 64 位(例如 python --版本, sys.maxsize, plastform.architecture).

这可能是什么原因造成的?

最佳答案

这是 bottleneck 库中的一个错误,Pandas 在安装后会使用它。在某些情况下,bottleneck.nansum 在 64 位输入上调用时错误地具有 32 位溢出行为。

我相信这是由于瓶颈 using PyInt_FromLong即使 long 是 32 位。实际上,我不确定为什么会编译。 bottleneck issue tracker 上有一个问题报告,尚未修复,以及关于 Pandas issue tracker 的问题报告,他们试图弥补 Bottleneck 的问题(但我认为他们在 Bottleneck 正常工作时关闭它,而不是在它不工作时关闭)。

关于python - pandas/numpy int64 中意外的 32 位整数溢出(python 3.6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43525492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com