numpy数组产品与乘法列表项

时间:2019-04-19 20:36:39

标签: python numpy

我想做一个列表的乘法项。 我是通过numpy和python循环完成的,结果是不同的。

您能告诉我什么问题吗?

Numpy代码

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

另一种情况:

Numpy代码

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

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

1 个答案:

答案 0 :(得分:1)

Python int是任意精度的。 NumPy dtypes不是; NumPy中的默认整数dtype对应于C long,在您的平台上为32位。要求数字对于C长的时间太大的计算将溢出。

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

没有溢出:

from turtle import forward as f, back as b, right as r, left as l, exitonclick

# to draw one square
f(100)
r(90)
f(100)
r(90)
f(100)
r(90)
f(100)

exitonclick()

仍然溢出:

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