我正在尝试计算从 s 到 p(3,-4) 的最接近余弦距离.即使余弦函数在范围内,我也得到了数学域错误


import math
data=[(1, 2), (3, 4), ((-1, 1), (6, 7), (0, 6), (-5, 8), (-1, -1),(6, 0), (1, -1) ]
data.sort(key = lambda x :math.acos(abs((x[0]*3)) +x[1]*(-4))) /math.sqrt(((float(x([0]-3))**2) +(float(x[1]) -(-4)) **2)))) 

我收到数学域错误

您缺少括号,因此平方根为负数。

首先,确保平衡偏执

。其次,math.acos(X( 在 [-1,1] 的包含范围内取值 X,上面的代码没有提供该值,因此存在数学域错误。

编辑:

>>> import math
>>> data=[(1, 2), (3, 4), (-1, 1), (6, 7), (0, 6), (-5, 8), (-1, -1),(6, 0), 
(1, -1) ]
>>> data.sort(key = lambda x:1 - (x[0] * 3 + x[1] * -4) / (math.sqrt(x[0]**2 
+ 9) * math.sqrt(x[1]**2 + 16)))
>>> data
[(6, 0), (1, -1), (-1, -1), (6, 7), (3, 4), (1, 2), (-1, 1), (-5, 8), (0, 6)]

以下是排序后的余弦距离:

0.3291796067500631 0.4631245078068408 0.9233035011152629 1.1849000654084096 1.2916666666666667 1.3535533905932737 1.5368754921931593 1.9011838618956602 2.1094003924504583

最新更新