首页 > 解决方案 > numpy array prod vs 乘以列表项

问题描述

我想做一个列表的多个项目。我是通过 numpy 和 python loop 完成的,结果不同。

你能告诉我有什么问题吗?

代码

import numpy as np
a= [5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
print (np.prod(a))
>> 2039787520

没有numpy的python代码

a= [5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
k=1
for i in a:
    k*=i
print (k)
>> 23514624000

另一个案例:

代码

a= [4, 7, 6, 5, 4, 5, 6, 8, 2, 8, 4, 8, 9]
import numpy as np
print (np.prod(a))
>> -579076096

没有 numpy

a= [4, 7, 6, 5, 4, 5, 6, 8, 2, 8, 4, 8, 9]
k=1
for i in a:
    k*=i
print (k)
>> 3715891200

问题:为什么在第二种情况下结果是负数和不同?

标签: pythonnumpy

解决方案


Python 整数是任意精度的。NumPy 数据类型不是;NumPy 中的默认整数 dtype 对应于 C long,在您的平台上是 32 位。需要对于 C long 来说太大的数字的计算将溢出。

您可以指定更大的 dtype 来存储更大的数字,但不能存储任意大的数字。

无溢出:

In [2]: numpy.prod([5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5], dtype='int64')
Out[2]: 23514624000

仍然溢出:

In [3]: numpy.prod([10000, 10000, 10000, 10000, 10000, 10000], dtype='int64')
Out[3]: 2003764205206896640

推荐阅读