gpt4 book ai didi

python - 为什么内置 sum 在 "from numpy import *"之后表现错误?

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:33 25 4
gpt4 key购买 nike

我有一些代码:

import math, csv, sys, re, time, datetime, pickle, os, gzip
from numpy import *

x = [1, 2, 3, ... ]
y = sum(x)

x中的实际值之和为2165496761,大于32位整数的限制。报告的y值为-2129470535,表示整数溢出。

为什么会这样?我以为内置的 sum 应该使用 Python 的任意大小的整数?


参见 How to restore a builtin that I overwrote by accident?如果您不小心在 REPL(解释器提示)下做了类似的事情。

最佳答案

执行 from numpy import * 会导致内置的 sum 函数被替换为 numpy.sum:

>>> sum(xrange(10**7))
49999995000000L
>>> from numpy import sum
>>> sum(xrange(10**7)) # assuming a 32-bit platform
-2014260032

要验证 numpy.sum 是否正在使用,请尝试检查结果的 type:

>>> sum([721832253, 721832254, 721832254])
-2129470535
>>> type(sum([721832253, 721832254, 721832254]))
<type 'numpy.int32'>

为避免此问题,请不要使用星号导入。

如果您必须使用 numpy.sum 并想要一个任意大小的整数结果,请为结果指定一个 dtype,如下所示:

>>> sum([721832253, 721832254, 721832254],dtype=object)
2165496761L

或者显式引用内置的 sum(可能给它一个更方便的绑定(bind)):

>>> __builtins__.sum([721832253, 721832254, 721832254])
2165496761L

关于python - 为什么内置 sum 在 "from numpy import *"之后表现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715750/

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