使用内积计算两个向量之间的角度

我想创建一个函数来计算两个向量 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

这不是正确的答案。


RISEBY
浏览 270回答 1
1回答

慕田峪7331174

您需要取分母的平方根,因为向量的范数v定义为sqrt(innerprod(v, v))。这是否给了您预期的答案?import numpy as npdef 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python