为什么numpy.power为小指数返回0,而math.pow返回正确的答案?
In [25]: np.power(10,-100) Out[25]: 0 In [26]: math.pow(10,-100) Out[26]: 1e-100
我希望这两个命令都能返回1e-100。 这也不是一个精确的问题,因为即使将精度提高到500之后问题仍然存在。是否有一些设置可以改变以获得正确答案?
哦,这比这更“糟糕”:
In [2]: numpy.power(10,-1) Out[2]: 0
但这是暗示: 10
是一个整数, numpy.power
不强制数字浮动。 但是这个工作:
In [3]: numpy.power(10.,-1) Out[3]: 0.10000000000000001 In [4]: numpy.power(10.,-100) Out[4]: 1e-100
但请注意,电力运营商**
确实转换为浮动:
In [5]: 10**-1 Out[5]: 0.1
numpy方法假定你想要提供一个整数后返回的整数。
np.power(10.0,-100)
按照您的预期工作。
(只是在这个页面上的其他两个答案的脚注。)
给定input两个input值,可以通过检查types
属性来检查np.power
将返回的对象的数据types
:
>>> np.power.types ['bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L', 'qq->q', 'QQ->Q', 'ee->e', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D', 'GG->G', 'OO->O']
与Python兼容的整数types由l
(兼容性兼容的Python浮点数d
( 文档 ))表示。
np.power
通过检查传递参数的types并使用该列表中的第一个匹配签名来有效地决定返回的内容。
所以给定10和-100, np.power
匹配integer integer -> integer
签名并返回整数0
。
另一方面,如果其中一个参数是一个float,那么整型参数也将被转换为一个float ,并且使用float float -> float
签名(并返回正确的float值)。