为什么numpy prod不像预期的那样工作?

yqyhoc1h  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(123)

我有一个包含n个元素的列表,我需要知道它们之间的乘积,所以:[x1,x2,x3,...],我需要x1* x2 * x3 ...
所以我尝试了numpy funcion prod如下:

np.array([20, 19, 18, 17, 16, 15, 14]).prod()

字符串
这很正常,就像它应该的那样但是,当我将元素13添加到列表中时,代码返回错误的答案。下面的代码给出了784,143,104的答案

np.array([20, 19, 18, 17, 16, 15, 14, 13]).prod()


,而这给出了正确答案,即5,079,110,400

20 * 19 * 18 * 17 * 16 * 15 * 14 * 13


奇怪的是,当我去掉第13号元素时,两者都给予了相同的正确答案,即390,700,800。我做错什么了?

wixjitnu

wixjitnu1#

由于整数溢出。列表元素相乘的结果超过了所使用的数据类型可以表示的最大值。
要解决这个问题,可以考虑使用可以处理较大数字的数据类型,如numpy.int64

import numpy as np

result = np.array([20, 19, 18, 17, 16, 15, 14, 13], dtype=np.int64).prod()

字符串

evrscar2

evrscar22#

默认情况下,NumPy根据提供的元素确定数据类型。在您的示例中,列表的元素是整数,当您添加数字13时,数据类型将更改为int64,该类型的存储容量有限

import numpy as np

arr = np.array([20, 19, 18, 17, 16, 15, 14, 13], dtype=np.int128)
result = arr.prod()

print(result)

字符串

相关问题