为何numpy.prod计算数组乘积结果不符合预期?
问题原因:整数溢出
这是numpy默认整数类型的溢出问题。numpy创建数组时,默认会用int32类型(多数系统下为32位整数),而int32的最大值是2147483647。
当你计算8个元素的乘积时,结果5079110400已经超过int32的上限,导致数值溢出截断,最终返回错误结果。而之前7个元素的乘积390700800小于int32的最大值,所以计算正常。
解决方法
方法1:指定numpy数组为64位整数类型
创建数组时显式声明dtype=np.int64,64位整数的最大值远大于你的计算结果,不会出现溢出:
import numpy as np np.array([20, 19, 18, 17, 16, 15, 14, 13], dtype=np.int64).prod()
执行后会返回正确结果5079110400。
方法2:使用Python原生计算
Python的原生int类型支持任意大的整数,不存在溢出问题。可以用functools.reduce结合乘法操作符计算:
from functools import reduce import operator reduce(operator.mul, [20, 19, 18, 17, 16, 15, 14, 13], 1)
或者直接用循环实现:
nums = [20, 19, 18, 17, 16, 15, 14, 13] product = 1 for num in nums: product *= num print(product)
内容的提问来源于stack exchange,提问作者Gustavo
相关产品推荐
相关产品推荐

