2017-11-30 10 views
-1

私は既に利用可能な解決策を試しましたが、この問題を解決できませんでした。math.logの数学ドメインエラー

オリジナルコード:

prob = n/self.totaldocs # 0.7445791360764896 
self.classpriorprob[cls] = math.log(prob) 

ソリューション:(しかし、私は、共通のログを取ることを好む)

prob = n/self.totaldocs 
d = Decimal(prob) 
self.classpriorprob[cls] = d.ln() 

としてはhereを述べた:私は3桁まで数値を四捨五入してみました。

prob = n/self.totaldocs 
number = round(prob, 3) # 0.744 
self.classpriorprob[cls] = math.log(number) 

でも、まだ数学的なドメインエラーが発生しています。

を編集しました。値を直接渡しました。つまりmath.log(0.744)です。 これは、Pythonコンソールでmath.log()関数を試しても機能します。

お知らせください。

仕様:私は0.0を得ていた
のpython 3.6.3
pycharm

+2

数値演算ドメインエラーは、通常、log(0)やlog(-7)などの数学的に無効な操作を実行しようとすると発生します。あなたのコードが決して不可能な値を計算しようとしないことは確かですか? –

+0

はい私は確信しています。変数probは0.7445791360764896です。私はそれを0.744に丸めると、まだエラーが出ます。それから私は単に '0.744 '、つまりmath.log(0.744)を渡して動作します。それは非常に奇妙です。 –

+0

'Decimal'オブジェクトをログ関数に渡していますか?最初に 'float'に変換しなければならないかもしれません。 – pault

答えて

0

私の場合、解決策は0.0の値をスキップすることです。

+1

'log number'のドメインが正であることと、浮動小数点数の正確な等価性をチェックすることが推奨されないので、' if number> 0'をチェックする方が良いでしょう。 – pault

関連する問題