为了账号安全,请及时绑定邮箱和手机立即绑定

两个 Numpy 数组之间的点积和角度(以度为单位)

两个 Numpy 数组之间的点积和角度(以度为单位)

临摹微笑 2023-12-26 14:58:48
我想编写一个函数,它接受两个长度相同的 numpy 数组并返回:两个数组的点积两个向量之间的角度(以度为单位)预期输出如下:print(angle_dot(np.array([0., 1.]), np.array([1., 0.])))## (0.0, 90.0)print(angle_dot(np.array([2., -1, 1, -2]), np.array([-1., 1.5, 3., 1])))## (-2.5, 102.5)这是我到目前为止所拥有的,我似乎无法获得正确的数组之间的角度值。import numpy as npdef angle_dot(a, b):    dot_product = round(np.dot(a, b), 1)    angle = round(np.degrees(dot_product), 1)    return dot_product, angleprint(angle_dot(np.array([0., 1.]), np.array([1., 0.])))## (0.0, 0.0)print(angle_dot(np.array([2., -1, 1, -2]), np.array([-1., 1.5, 3., 1])))## (-2.5, -143.2)
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

使用以下公式定义角度(这只是定义它的一种方法):


cos(alpha) = (a . b) / (|a| * |b|)

所以,角度为:


alpha = arccos((a . b) / (|a| * |b|))

代码:


import numpy as np


def angle_dot(a, b):

    dot_product = np.dot(a, b)

    prod_of_norms = np.linalg.norm(a) * np.linalg.norm(b)

    angle = round(np.degrees(np.arccos(dot_product / prod_of_norms)), 1)

    return round(dot_product, 1), angle


print(angle_dot(np.array([0., 1.]), np.array([1., 0.])))


print(angle_dot(np.array([2., -1, 1, -2]), np.array([-1., 1.5, 3., 1])))

输出:


(0.0, 90.0)

(-2.5, 102.5)


查看完整回答
反对 回复 2023-12-26
?
炎炎设计

TA贡献1808条经验 获得超4个赞

使用点积求 2 个 n 维数组之间的角度的公式为:


dot(a, b) = ||a|| * ||b|| * cos(theta)

theta = arccos( dot(a, b) / (||a|| * ||b||))

或者在 numpy 中:


def angle(a, b):

    return np.degrees(np.arccos(np.dot(a, b)/ (np.linalg.norm(a) * np.linalg.norm(b))))


查看完整回答
反对 回复 2023-12-26
  • 2 回答
  • 0 关注
  • 60 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信