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)取值X在[-1,1]的包含范围内,而上面的代码没有提供这个范围,所以出现了数学域错误。
编辑。
>>> 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