为什么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值)。