当前位置: 首页 > 面试题库 >

为什么numpy.prod()对于一长串自然数会错误地返回负数或0?

费子濯
2023-03-14
问题内容

我只是在研究Euler项目问题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使用“无限”整数,但是在numpy中,所有类型都被键入,因此这里是“
C”风格(可能是64位)整数。您可能正在经历溢出。

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

返回数组的类型,以及与元素相乘的累加器的类型。

您可以执行以下操作:

  1. 回到Python,并使用其“无限整数”相乘(有关方法,请参阅此问题)。

  2. 考虑您是否真的需要找到如此庞大的产品。通常,当您使用非常小或非常大的乘积时,会切换到对数和。正如@WarrenWeckesser指出的那样,这显然是不精确的(这不像最后采用指数会为您提供确切的解决方案),而是用来衡量一种产品是否比另一种产品增长更快。



 类似资料:
  • 问题内容: 我有这个代码: 为什么几次打印后会变成负片?如果超出范围,是否不应该发生错误? 问题答案: 如果将数字增加到最大值之后,Java不会抛出错误。如果您希望具有此行为,则可以使用Java 8中的方法。如果传递,则该方法将引发。 Java不会引发异常并且您收到负数的原因与数字的存储方式有关。对于长原语,第一个字节用于指示数字的符号(0->正号,1->负号),其余字节用于数字值。这意味着最大的

  • 问题内容: 在Java中,hashcode()方法返回整数而不是long。有什么具体原因吗? 问题答案: 那么,一个良好的理由是,基于数据结构(,)使用一个数组来存储箱,并且阵列被限制为索引。 如果必须将其映射到数组索引,那么您将一无所获。

  • 试图对这个问题中的各个数字求和。然而,当涉及负数时,函数就会分崩离析。这是因为当您使用toString()时,会将负号转换为NewStr中的值。例如,在本例中,newstr[0]==='-'。不管怎么说都是为了解决这个问题?最好使用Number()函数

  • 问题内容: 我对此很好奇: 使用Java进行评估时,会发生以下异常: 线程“主”中的异常java.lang.ArithmeticException:/在Foo.main(Foo.java:3)处为零 但是被评估为。 为什么会这样? 问题答案: 这是因为整数没有+/- Inf,NaN的值,并且不允许除以0,而浮点数确实具有这些特殊值。

  • 问题内容: 因此,如果我有一个范围为‘0-1024’的数字,并且希望将其取为‘0-255’,那么数学将决定将输入除以输入的最大值(在这种情况下为1024),从而得出我的数字介于0.0-1.0之间。然后将其乘以目标范围(255)。 我要做什么! 但是由于Java中的某些原因(使用处理),它将始终返回值0。 该代码将像这样简单 但是我只得到0.0。我已经尝试过两次和诠释。一切都无济于事。为什么!? 问

  • 问题内容: Go具有非常整洁的多个返回值范例。但是它看起来和使用具有相同符号的不同机制。这是一个简单的示例: 在上面的示例中,给出错误为返回两个值,而和-两个表达式都正常工作而没有任何错误。为什么会有不同的行为? 问题答案: 在地图,数组或切片上使用内建的获取,并且还允许一个 或 两个变量。用户定义的函数和方法不是这种情况。如果一个函数声明了两个返回值,则必须告诉他们如何处理这两个返回值,或者忽略