2017-04-19 12 views
0

具体的には、これらの累積積関数は、多数の小さな数値を掛け合わせるとアンダーフローを処理するために堅牢な方法で実装されたpandasnumpyであるか?たとえば、log-sum-expトリックを使用していますか?Python:pandas.DataFrame.comprod()とnumpy.comprod()は数値のアンダーフローを処理しますか?

ありがとうございました。

+1

これはかなり簡単に確認できます。たとえば、 'x = np.array([1e-5,1e-30,1e-100,1e-200,1e50,1e150])'を設定し、 'np.cumprod(x)'と 'np.exp (np.cumsum(np.log(x))) 'となります。 –

+0

はい私は似たようなことをしましたが、理論上の境界がどこにあるのか、あるいは私のプラトフォーム(マシン/ OSなど)の限界にちょうど当たっているかどうかはわかりませんでした。 – WillZ

答えて

1

残念ながら、 @ warren-weckesserのコメントはこれがうまくいかないことを示しています。

np.array([1e-5, 1e-30, 1e-100, 1e-200, 1e50, 1e150]).cumprod() 

# returns 
array([1.0e-005, 1.0e-035, 1.0e-135, 0.0e+000, 0.0e+000, 0.0e+000]) 

これは、numpy浮動小数点数が2 ** - 1022または約2.225e-308の正の最小値をサポートしているためです。あなたの計算がそれよりも小さくなると、それはゼロに落とされます。これは上記の出力で見られます。同じことがパンダにも当てはまります。

関連する問題