次の比率を計算しようとしています:
w(i) / (sum(w(j))
ここでw
、指数関数的減少関数を使用して更新されます。つまりw(i) = w(i) * exp(-k)
、k
正のパラメーターです。すべての数値は負ではありません。次に、この比率を式に使用します (定数を掛けて、別の定数を追加します)。予想通り、すぐにアンダーフローの問題に遭遇しました。
これはよくあることだと思いますが、誰かがこれに対処する方法について参考にしてもらえますか? 適切な変換が見つからなかったので、安全しきい値として最小の正の数を設定しようとしましたが、最小の正のフロートを見つけることができませんでした (私は で数値を表していますnumpy.float128
)。私のマシンで実際に最小の正の数を取得するにはどうすればよいですか? コードは次のようになります。
w = np.ones(n, dtype='float128')
lt = np.ones(n)
for t in range(T):
p = (1-k) * w / w.sum() + (k/n)
# Process a subset of the n elements, call it set I, j is some range()
for i in I:
s = p[list(j[i])].sum()
lt /= s
w[s] *= np.exp(-k * lt)
ここで、k は (0,1) の定数で、n は配列の長さです。