Python两种方法计算乘积结果不同,求解释原因
为什么numpy.prod返回错误的负数结果?
问题核心是整数溢出:
- Python原生
int是任意精度类型,无论数值多大都能准确存储,所以方法2的循环相乘能得到正确的大数结果。 - numpy的
prod函数默认使用固定大小的整数类型(如int32或int64),当乘积超过该类型的最大值时,会发生溢出回绕(数值超过上限后从下限重新计数),最终得到错误的负数结果。
你计算的是3^34,结果为16677181699666569,这个数值远大于int32的最大值(2^31-1=2147483647),即使对应int64,若numpy计算时使用了更小的中间类型,也会触发溢出。
解决方法
调用np.prod时指定dtype=object,让numpy使用Python的任意精度整数计算:
np.prod([len(x) for x in arr], dtype=object)
执行后即可得到正确结果16677181699666569。
内容的提问来源于stack exchange,提问作者user1340852
相关产品推荐
相关产品推荐

