我正在尝试学习python,numpy包。我正在评估以下代码
import numpy as np
>>> np.prod(range(1,33))
-2147483648
>>> np.prod(range(1,34))
-2147483648
>>> np.prod(range(1,35))
0
为什么np.prod(range(1,35))
等于零?
为什么np.prod(range(1,34))
是负值?
答案 0 :(得分:3)
Python的内置整数用于存储无限大的数字。但是,随着数量的增加,对它们进行数学运算的成本也会增加。
另一方面,Numpy使用一组固定大小的整数。这些数字具有与计算机上可用硬件相关的最大大小(通常为2**63
和>>> int(np.prod(range(1,21))) * 22
53523844179886080000L
>>> np.prod(range(1,21)) * 22
-1816388041242574848
>>> int(np.prod(range(1,21))) * 22 > 2**64
True
)。这允许numpy实现非常快速的数学运算,但代价是可以存储最大值。
你正在溢出numpy允许的最大值。
public class DropDownList : Attribute
{
public Type EnumType { get; set; }
public DropDownList(Type type)
{
this.EnumType = type;
}
}
答案 1 :(得分:1)
算术在使用整数类型时是模块化的,并且在溢出时不会引发错误。查看docs
>>> x = np.array([536870910, 536870910, 536870910, 536870910])
>>> np.prod(x) #random
16