python math.acos 中的域错误,输入有效
Domain error in python math.acos with valid input
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。我已经完成了类型检查等,一切似乎都已检查完毕。
您遇到了舍入问题。由于浮点舍入错误,x
可以采用 1.0000000000000002
之类的值,因此会触发错误。您可以将 math.acos
替换为 numpy.acos
以静默观察追加的内容。
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。我已经完成了类型检查等,一切似乎都已检查完毕。
您遇到了舍入问题。由于浮点舍入错误,x
可以采用 1.0000000000000002
之类的值,因此会触发错误。您可以将 math.acos
替换为 numpy.acos
以静默观察追加的内容。