有没有numpy的大整数?

18

嗯,似乎没有一种方法可以将Python的bigintegers存储在numpy数组中。声明一个带有bigints的numpy数组需要做些特殊的事情吗?

1个回答

30

没有特别的方法,您可以使用 dtype='object' 创建一个数组,它将创建一个包含Python对象(包括但不限于int)的数组。这将为您提供许多类似于Numpy数组的功能,但几乎没有性能优势。

也就是说,与Python list 相比,在内存性能方面,Python对象数组没有明显的差异。尽管如果您必须使用大整数,仍然可能更喜欢使用数组而不是 list,因为您仍然可以获得逐元素算术运算,包括对其他Numpy数组进行操作的运算。例如:

In [1]: import numpy as np

In [2]: big = np.array([10**100, 10**101, 10**102], dtype='object')

In [3]: big
Out[3]: 
array([ 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,
       100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,
       1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000], dtype=object)

In [4]: big + np.array([1, 2, 3])
Out[4]: 
array([ 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,
       100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002,
       1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003], dtype=object)

我自己从未使用过这个功能,因此我不完全确定会出现哪些令人惊讶的限制。


2
看起来运行良好。我使用填充整数的numpy矩阵计算斐波那契数列,包括dotmatrix_power等操作都可以正常工作。 - Ilya Kolpakov
7
顺便提一下,我一直在考虑为Numpy添加基于GMP的大整数类型。我个人没有足够强烈的动力去完成它,但我认为它可能会很有用。 - Iguananaut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接