In [25]: np.power(10,-100)
Out[25]: 0
In [26]: math.pow(10,-100)
Out[26]: 1e-100
我希望这两个命令都返回1e-100。这也不是精确问题,因为即使将精度提高到500之后问题仍然存在。是否有一些设置我可以更改以获得正确的答案?
答案 0 :(得分:71)
哦,它更糟糕"更糟糕"那个:
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
但请注意,幂运算符**
, 转换为float:
In [5]: 10**-1
Out[5]: 0.1
答案 1 :(得分:35)
numpy方法假设您希望在提供整数后返回整数。
np.power(10.0,-100)
按预期工作。
答案 2 :(得分:2)
(这是本页另外两个答案的脚注。)
给定输入两个输入值,您可以通过检查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兼容的整数类型由l
表示,兼容兼容的Python浮点数由d
(documents)表示。
np.power
通过检查传递的参数类型并使用此列表中的第一个匹配签名来有效地决定返回的内容。
因此,给定10和-100,np.power
匹配integer integer -> integer
签名并返回整数0
。
另一方面,如果其中一个参数是浮点数the integer argument will also be cast to a float,则使用float float -> float
签名(并返回正确的浮点值)。