📜  计算两个 N 维向量之间的角度的程序(1)

📅  最后修改于: 2023-12-03 15:41:37.252000             🧑  作者: Mango

计算两个 N 维向量之间的角度的程序

程序介绍

这是一个用于计算两个 N 维向量之间的夹角的程序。通常在计算机视觉、机器学习、图形学等领域,需要计算向量之间的夹角来进行相似性的度量、分类等操作。该程序能够处理任意维度的向量,并返回角度的弧度值。

实现方法

向量的夹角可以通过向量内积和向量模长计算得出。具体来说,两个向量 a 和 b 的夹角 θ 可以通过以下公式计算:

cos(θ) = (a · b) / (||a|| ||b||)

其中,"·" 表示向量内积(点乘),即将对应元素相乘后求和,"||" 表示向量的模长。

我们可以通过 numpy 库中的 dot() 函数计算向量内积,norm() 函数计算向量模长。那么,代码实现如下:

import numpy as np

def calc_vector_angle(v1, v2):
    """
    计算任意维度向量v1, v2之间的夹角,返回角度的弧度值
    """
    if len(v1) != len(v2):
        raise ValueError("向量维数不相等")
        
    dot_product = np.dot(v1, v2)
    norm_product = np.linalg.norm(v1) * np.linalg.norm(v2)
    cos_angle = dot_product / norm_product
    radian_angle = np.arccos(cos_angle)
    
    return radian_angle

该程序会首先检查两个向量的维数是否相等,若不相等则会抛出异常。然后,计算向量内积和向量模长,最后计算出余弦值和弧度值,返回弧度值。

示例代码

以下是计算两个二维向量([1, 2], [3, 4])之间夹角的示例代码:

v1 = np.array([1, 2])
v2 = np.array([3, 4])

angle = calc_vector_angle(v1, v2)
print(angle)  # 输出 0.040389441
总结

该程序可以处理任意维度的向量,通过向量内积和向量模长计算向量之间的夹角,返回角度的弧度值。在计算机视觉、机器学习、图形学等领域,这个程序可以用于相似性度量、分类等操作。