我正在使用numpy从包含大量数字的数组/矩阵中查找单个元素的幂。我没有得到所需的输出,我可以通过使用计算器得到。
m = np.mod(np.power(96, 17), 703) print(m)
字符串代码打印0,但预期输出为153。
2lpgd9681#
最大的numpy整数不够大:
np.int64(96 ** 17) # => OverflowError: Python int too large to convert to C long
字符串在np.power中使用numpy整数会静默地吞下错误,并返回0,这就是问题的根源:
np.power
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_;所以这个也不行:
dtype=int
int
np.int_
np.power(96, 17, dtype=int) # => 0
型然而,指定dtype=object**似乎可以做到这一点,确保numpy将其视为Python对象(同时仍然能够利用numpy的向量化语义):
dtype=object
np.mod(np.power(96, 17, dtype=object), 703) # => 153
型
1条答案
按热度按时间2lpgd9681#
最大的numpy整数不够大:
字符串
在
np.power
中使用numpy整数会静默地吞下错误,并返回0
,这就是问题的根源:型
最大的numpy float将起作用,但您必须显式地指定它;此外,您需要记住,在某些情况下,由于精度损失可能会出现错误:
型
但最好还是使用本地任意大小的整数,因为这样可以保证得到正确的结果:
型
然而,这使我们无法使用numpy数组操作数进行计算。有人会认为我们可以通过指定
dtype=int
来实现这一点,但int
将被解释为np.int_
;所以这个也不行:型
然而,指定
dtype=object
**似乎可以做到这一点,确保numpy将其视为Python对象(同时仍然能够利用numpy的向量化语义):型