使用NumPy时的长整数

2024-05-29 04:10:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下两个向量和的简单代码。你知道吗

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

Tags: ofthe元素sizereturndefasnp
1条回答
网友
1楼 · 发布于 2024-05-29 04:10:37

纯Python整数可以任意增长。Numpy整数不能;它们受到数据类型大小的限制。如果它们变得太大,它们就会卷起,变成负数。看起来您的数组数据类型可能是int32,它溢出并导致负结果。在这种情况下,使用int64可以得到正确的结果:

a = np.arange(n, dtype=np.int64) ** 2 
b = np.arange(n, dtype=np.int64) ** 3

但是,它最终还是会溢出(如果您将size变大)。您还可以使用float64,这允许使用更大的数字,但这样会丢失精度。你知道吗

整数大小的上限是您为numpy提供的速度所付出的代价。你知道吗

相关问题 更多 >

    热门问题