Sea*_*mer 9 python numpy integer-overflow python-3.x pandas
让我从示例代码开始:
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())
Run Code Online (Sandbox Code Playgroud)
在我的本地计算机和其他开发人员的计算机上,这可以按预期工作并打印出来:
0 4986289
1 536385600
2 1901657664
Name: nums, dtype: int64
2443029553
Run Code Online (Sandbox Code Playgroud)
但是,在我们的生产服务器上,我们得到:
0 4986289
1 536385600
2 1901657664
Name: nums, dtype: int64
-1851937743
Run Code Online (Sandbox Code Playgroud)
这是32位整数溢出,尽管它是一个int64.
生产服务器使用python,numpy的,熊猫等相同版本这是一个64-bit Windows Server 2012OS,一切报道64位(例如python --version,sys.maxsize,plastform.architecture).
什么可能导致这个?
这是bottleneck库中的一个错误,如果它已安装,Pandas会使用它.在某些情况下,bottleneck.nansum在64位输入上调用时,错误地具有32位溢出行为.
我认为,这是由于bottleneck 使用PyInt_FromLong时,即使long是32位的.实际上,我不确定为什么甚至会编译.有一个关于瓶颈问题跟踪器的问题报告,尚未修复,以及关于Pandas问题跟踪器的问题报告,他们试图弥补瓶颈的问题(但我认为他们在工作时关闭了瓶颈而不是它没有).
| 归档时间: |
|
| 查看次数: |
698 次 |
| 最近记录: |