我有以下两个向量和的简单代码。你知道吗
但是,我在使用NumPy时得到了错误的结果。你知道吗
The results of the codes is as follows:
在[12]中:%run-i测试.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:]
纯Python整数可以任意增长。Numpy整数不能;它们受到数据类型大小的限制。如果它们变得太大,它们就会卷起,变成负数。看起来您的数组数据类型可能是int32,它溢出并导致负结果。在这种情况下,使用int64可以得到正确的结果:
但是,它最终还是会溢出(如果您将
size
变大)。您还可以使用float64
,这允许使用更大的数字,但这样会丢失精度。你知道吗整数大小的上限是您为numpy提供的速度所付出的代价。你知道吗
相关问题 更多 >
编程相关推荐