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

我想编写一个函数,它接受两个长度相同的 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 np

def angle_dot(a, b):

    dot_product = round(np.dot(a, b), 1)

    angle = round(np.degrees(dot_product), 1)

    return dot_product, angle


print(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)


临摹微笑
浏览 69回答 2
2回答

收到一只叮咚

使用以下公式定义角度(这只是定义它的一种方法):cos(alpha) = (a . b) / (|a| * |b|)所以,角度为:alpha = arccos((a . b) / (|a| * |b|))代码:import numpy as npdef 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), angleprint(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)

炎炎设计

使用点积求 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))))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python