python - 两个 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)
解决方案
使用此公式定义角度(这只是定义它的一种方式):
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)
推荐阅读
- flutter - Flutter:Speech to text 错误在 null 上调用了“initialize”方法
- r - R时间序列数据图 - 色调+平均实线
- dataframe - 使用新的“其他变量”创建新列
- c# - IIS 没有收到对 HTML 的更新?
- python - Pandas 将每年与某个属性关联的列合并为单独的列
- javascript - 有没有办法使用 Web Audio API 重新采样音频流?
- python - 在 Plotly 中使用三个 1D 浮点数组创建 3D 曲面图
- javascript - 是什么导致 React.js 上的表单解析错误
- reactjs - 创建反应应用程序 - 小型 EC2 服务器上的 `yarn build` 占用 100% CPU 并使其无响应
- c++ - 树形图的直径