gpt4 book ai didi

python - Python multiply() 和 prod() 的错误结果

转载 作者:太空宇宙 更新时间:2023-11-04 07:25:54 28 4
gpt4 key购买 nike

谁能解释一下?我正在使用 Python 2.5

考虑 1*3*5*7*9*11 ... *49。如果您在 IPython(x,y) 交互式控制台中键入所有这些内容,您将得到 58435841445947272053455474390625L,这是正确的。 (为什么是奇数:就像我最初做的那样)

Python multiply.reduce() 或 prod() 应该在等效范围内产生相同的结果。在一定程度上确实如此。这里,已经错了:

: k = range(1, 50, 2)
: multiply.reduce(k)
: -108792223

使用 prod(k) 也会生成 -108792223 作为结果。对于长度为 12 的等效范围(即 k = 范围 (1,24,2)),开始出现其他不正确的结果。

我不确定为什么。谁能帮忙?

最佳答案

这是因为numpy.multiply.reduce()将范围列表转换为类型为numpy.int32的数组,reduce操作溢出了可以存储的内容在某些时候是 32 位:

>>> type(numpy.multiply.reduce(range(1, 50, 2)))
<type 'numpy.int32'>

正如 Mike Graham 所说,您可以使用 dtype 参数来使用 Python 整数而不是默认值:

>>> res = numpy.multiply.reduce(range(1, 50, 2), dtype=object)
>>> res
58435841445947272053455474390625L
>>> type(res)
<type 'long'>

但是在这种情况下使用 numpy 来处理 python 对象是没有意义的,最好的解决方案是 KennyTM 的:

>>> import functools, operator
>>> functools.reduce(operator.mul, range(1, 50, 2))
58435841445947272053455474390625L

关于python - Python multiply() 和 prod() 的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2288952/

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