我想创建一个函数来计算两个向量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
这不是正确的答案。
您的建议将不胜感激。
答案 0 :(得分:0)
由于向量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