为什么numpy.dot()对大值给出了不正确的答案?

为什么numpy.dot()对大值给出了不正确的答案?,numpy,data-science,large-data,dot-product,Numpy,Data Science,Large Data,Dot Product,这是一个溢出问题 33328335000远远大于2^31,因此您需要在long a=list(range(10000)) b=list(range(10000)) result=0 for i,j in zip(a,b): result+=i*j print(result) print() import numpy as np numpy_result=np.dot((np.array(a)),(np.array(b))) print(numpy_result) Output

这是一个溢出问题

33328335000远远大于2^31,因此您需要在
long

a=list(range(10000))
b=list(range(10000))

result=0
for i,j in zip(a,b):
    result+=i*j
print(result)

print()

import numpy as np

numpy_result=np.dot((np.array(a)),(np.array(b)))
print(numpy_result)

Output

333283335000

-1724114088
33328335000

看起来像
np.array(a)
有一个
np.int32
dtype
np.int64
是较新计算机和/或python/numpy版本上的默认值。
numpy_result=np.dot(np.array(a, dtype=np.longlong), np.array(b, dtype=np.longlong))