我试图计算从s到p(3,-4)的最近余弦距离.尽管余弦函数在范围内,但我得到数学域错误。

问题描述 投票: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 :math.acos(abs((x[0]*3)) +x[1]*(-4))) /math.sqrt(((float(x([0]-3))**2) +(float(x[1]) -(-4)) **2)))) 

我收到数学域的错误信息

python python-3.x math output trigonometry
1个回答
0
投票

你少了一个括号,所以你的平方根是负数。


0
投票

首先,请确保你的平方根是负数。

其次,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

© www.soinside.com 2019 - 2024. All rights reserved.