使用NumPy时的长整数

时间:2017-04-22 05:58:09

标签: python numpy

我有两个简单的代码用于两个向量的总和。

但是,当我使用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:]

1 个答案:

答案 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给你的价格。