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