我想创建一个函数来计算两个向量 x、y 之间的角度,使用内积的定义为 x@A@y,其中 A 是一个正定矩阵。我的功能如下:def angle(A, x, y): import numpy as np from numpy.linalg import norm nominator = x@A@y denominator = (x@A@x)*(y@A@y) angle = np.arccos(nominator/denominator) return(angle)但是,它不会返回正确的答案。例如,y = np.array([0, -1])x = np.array([1, 1])A = np.array([ [1, -1/2], [-1/2, 5]])angle(A, x, y)1.7517827780414443这不是正确的答案。
1 回答
慕田峪7331174
TA贡献1828条经验 获得超13个赞
您需要取分母的平方根,因为向量的范数v定义为sqrt(innerprod(v, v))。这是否给了您预期的答案?
import numpy as np
def angle(A, x, y):
nominator = x@A@y
denominator = np.sqrt((x@A@x)*(y@A@y))
angle = np.arccos(nominator/denominator)
return(angle)
angle(A, x, y)
2.6905658417935308
添加回答
举报
0/150
提交
取消