为什么numpy.dot()对大值给出了错误的答案


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

这是一个溢出问题。

333283335000远大于2^31,因此您需要在long long中进行操作

numpy_result=np.dot(np.array(a, dtype=np.longlong), np.array(b, dtype=np.longlong))

333283335000