有没有办法强制Python在Windows上使用64位整数?

3
我注意到,每当整数超过2^31-1时,我的代码会变得非常缓慢,尽管我在64位版本的Windows上使用了64位版本的Python。这似乎在Python 2.7和Python 3上都是true。我读到Windows将其长整型设置为32位,但这并不意味着无法使用64位数字。
是否有一种方法可以通过类、模块甚至不同版本的Python来使用64位整数?

你使用的是哪个版本的Python?如果您使用的是Python3,在10^9之后您将使用任意精度整数,这也将是一个因素。 - Padraic Cunningham
3个回答

4
my_array = numpy.array(my_list,dtype=numpy.int64)

也许?

看numpy和scipy是正确的答案,特别是因为提问者似乎对在Python上进行更高性能计算的“更大世界”感兴趣。 - Peter M

1
我不知道任何使用64位本地类型的Windows版本与Python 2.7相关。所有的C编译器都会使用long来引用32位类型。将Python更改为在int的内部表示中使用long long可能会破坏扩展模块。
在Python 3.x上,唯一的整数类型是任意精度类型(在Python 2.x下称为long)。在64位系统上,任意精度类型按2 ^ 30位的块工作。在32位系统上,任意精度类型按2 ^ 15位的块工作。值15和30很难改变。
对于外部库,我维护gmpy2库。它提供了对任意精度GMP/MPIR库的访问。一旦数字达到~128位长度,gmpy2.mpz整数类型通常更有效率。你的情况可能有所不同。

是的,但即使在3.x版本中也有一些地方使用PyLong值拆箱为机器上的long值以提高性能(例如实现内置sum)。在这些情况下,Windows版本需要通过调用PyLong_AsLongLongAndOverflow将其拆箱为long long值。这会使代码更难以维护。 - Eryk Sun

-1

Python有四种数字类型,其中包括整数类型int和long。长整型具有无限精度。当你输入一个足够大的数字时,会自动转换为长整型,或者你可以通过在数字后面添加“l”来显式指定。

>>> s = 1000
>>> type(s)
<type 'int'>
>>> s = 1000l
>>> type(s)
<type 'long'>

1
我认为这并没有回答问题,已经意识到了intlong之间的区别。问题是如何让Python本身利用处理器的64位能力来处理int类型,以避免long固有的缓慢。 - Mark Ransom
也许吧。第一个链接显示长时间需要“更长”的时间,因为它们是“更大”的计算。有道理。第二个链接显示在Windows上maxint是32位的(与Python文档相符)。问题是如何“强制64位”,而不是如何使其更快,尽管在前言中提到了一些内容,所以OP似乎怀疑较长的计算是由于默认使用32位造成的。就像我说的,“也许” :) - Wyrmwood

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