numpy 如何在Python中获得一个大数字与另一个大数字的幂?

at0kjp5o  于 2023-08-05  发布在  Python
关注(0)|答案(1)|浏览(99)

我正在使用numpy从包含大量数字的数组/矩阵中查找单个元素的幂。我没有得到所需的输出,我可以通过使用计算器得到。

m = np.mod(np.power(96, 17), 703)
print(m)

字符串
代码打印0,但预期输出为153。

2lpgd968

2lpgd9681#

最大的numpy整数不够大:

np.int64(96 ** 17)
# => OverflowError: Python int too large to convert to C long

字符串
np.power中使用numpy整数会静默地吞下错误,并返回0,这就是问题的根源:

np.power(96, 17, dtype=np.int64)
# => 0


最大的numpy float将起作用,但您必须显式地指定它;此外,您需要记住,在某些情况下,由于精度损失可能会出现错误:

np.power(96, 17, dtype=np.float128)
# => 4.9958680767981378818e+33
np.mod(np.power(96, 17, dtype=np.float128), 703)
# => 153.0


但最好还是使用本地任意大小的整数,因为这样可以保证得到正确的结果:

96 ** 17 % 703
# => 153


然而,这使我们无法使用numpy数组操作数进行计算。有人会认为我们可以通过指定dtype=int来实现这一点,但int将被解释为np.int_;所以这个也不行:

np.power(96, 17, dtype=int)
# => 0


然而,指定dtype=object**似乎可以做到这一点,确保numpy将其视为Python对象(同时仍然能够利用numpy的向量化语义):

np.mod(np.power(96, 17, dtype=object), 703)
# => 153

相关问题