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
ただし、電力演算子**
、doesはfloatに変換されることに注意してください。
In [5]: 10**-1
Out[5]: 0.1
numpyメソッドは、整数を指定したため、整数が返されることを前提としています。
np.power(10.0,-100)
期待どおりに機能します。
(このページの他の2つの回答の脚注です。)
入力に2つの入力値が与えられた場合、types
属性を調べることにより、np.power
が返すオブジェクトのデータ型を確認できます。
>>> 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
を返します。
一方、引数の1つがfloatの場合、 整数引数もfloatにキャストされます 、float float -> float
シグネチャが使用されます(正しいfloat値が返されます) )。