我有两个简单的代码用于两个向量的总和。
但是,当我使用NumPy时,我得到了错误的结果。
The results of the codes is as follows:
在[12]中:%run -i test.py
总和的最后2个元素[7980015996L,7992002000L]
总和的最后2个元素[-609918596 -597932592]
它不是一个长整数,为什么?
import numpy as np
def numpysum(n):
a = np.arange(n) ** 2
b = np.arange(n) ** 3
c = a + b
return c
def pythonsum(n):
a = range(n)
b = range(n)
c = []
for i in range(len(a)):
a[i] = i ** 2
b[i] = i ** 3
c.append(a[i] + b[i])
return c
size = 2000
c = pythonsum(size)
print "The last 2 elements of the sum", c[-2:]
c = numpysum(size)
print "The last 2 elements of the sum", c[-2:]
答案 0 :(得分:0)
纯Python整数可以任意增长。 Numpy整数不能;它们受数据类型大小的限制。如果它们变得太大,它们会缠绕并变为负面。看起来您的数组dtype可能是int32,它会溢出并导致负面结果。在这种情况下,您可以使用int64:
获得正确的结果a = np.arange(n, dtype=np.int64) ** 2
b = np.arange(n, dtype=np.int64) ** 3
但是,它最终仍会溢出(如果你使size
更大)。你也可以使用float64
,它允许更大的数字,但是你将失去精确度。
整数大小的上限是你为numpy给你的价格。