gpt4 book ai didi

python - 为什么 numpy.prod() 对于我的一长串自然数错误地返回负结果或 0?

转载 作者:太空狗 更新时间:2023-10-29 21:33:41 24 4
gpt4 key购买 nike

我正在研究 Euler 项目 problem 12 ,所以我需要对超过 500 个唯一因子的倍数的数字进行一些测试。

我认为数组 [1, 2, 3... 500] 是一个很好的起点,因为该数组的乘积是可能的最小数字。但是,numpy.prod() 会为此数组返回 。我确定我遗漏了一些明显的东西,但这到底是什么东西?

>>> import numpy as np
>>> array = []
>>> for i in range(1,100):
... array.append(i)
...
>>> np.prod(array)
0
>>> array.append(501)
>>> np.prod(array)
0
>>> array.append(5320934)
>>> np.prod(array)
0

最佳答案

请注意 Python uses "unlimited" integers ,但在 numpy 中,所有内容都是类型化的,因​​此这里是“C”风格(可能是 64 位)整数。您可能遇到了溢出。

如果您查看 numpy.prod 的文档,可以看到dtype参数:

The type of the returned array, as well as of the accumulator in which the elements are multiplied.

您可以做一些事情:

  1. 回到 Python,并使用它的“无限整数”进行乘法运算(有关操作方法,请参阅 this question)。

  2. 考虑一下您是否真的需要找到如此庞大的数字的乘积。通常,当您处理非常小或非常大的数字的乘积时,您会切换到对数和。正如@WarrenWeckesser 指出的那样,这显然是不精确的(这不像是在末尾取指数就能得到确切的解决方案)- 相反,它用于衡量一种产品的增长速度是否快于另一种。

关于python - 为什么 numpy.prod() 对于我的一长串自然数错误地返回负结果或 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39089618/

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