python math.acos中的域错误,有效输入

时间:2017-02-20 21:42:44

标签: python math cosine

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代码。我试图找到表示为列表的两个向量之间的角度。当我运行此代码时,输​​出为:

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.我做了类型检查等等,一切似乎都检查出来。

1 个答案:

答案 0 :(得分:0)

您遇到了舍入问题。由于浮动舍入错误,x可以采用1.0000000000000002之类的值,因此会触发错误。您可以math.acos替换numpy.acos以静默观察追加的内容。