2017-02-20 11 views
-1
def dot(x, y): 
    return sum([ x[i]*y[i] for i in range(1,10)]) 

def magnitude(x): 
    return math.sqrt(sum([x[i]*x[i] for i in range(1,10)])) 

def cosine_similarity(x, y): 
    x = dot(x, y)/(magnitude(x)*magnitude(y)) 
    print(x) 
    print(math.acos(x)) 
    return math.acos(x)/math.pi 

これは私のpythonコードです。私はリストとして表される2つのベクトルの間の角度を見つけようとしています。私はこのコードを実行すると、出力は次のとおりです。有効な入力を持つpython math.acosのドメインエラー

1.0 
Traceback (most recent call last): 
    File "problem5.py", line 64, in <module> 
    print(cosine_similarity(reservoir[0][0], reservoir[0][0])) 
    File "problem5.py", line 41, in cosine_similarity 
    print(math.acos(x)) 
ValueError: math domain error 

私は私のコンソールで入力するか、 math.acos(1.0) を提出した場合それは正確に私に0を与え、私は型チェックを行っているなど、すべてがいるようですチェックアウト。

+0

パラメータ 'x'を上書きしています。避ける –

+0

そのコードを実行すると何も表示されません。あなたの 'cosine_similarity()'関数を呼び出し、エラーを出すコードを表示してください(おそらく小さなサイズに縮小してください)。参考文献[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) –

+0

どのバージョンのPython? –

答えて

0

丸めの問題が発生しました。 xは、浮動小数点の丸め誤差のために1.0000000000000002のような値をとる可能性があるため、エラーを発生させます。 math.acosnumpy.acosに置き換えて、追加する内容を静かに確認することができます。

関連する問題