计算numpy中两个矩阵的行之间的角度

RRS

我有两个由3d向量(numpy 1D数组)组成的矩阵,我需要按行计算向量之间的角度,并将结果返回到1d数组中。我知道如何计算两个1d向量之间的角度。正确的方法是什么?

***结果角度以度为单位,不是弧度。

现在,我有了这个:

import numpy as np

A = np.array([[1,0,0],
              [0,1,0],
              [0,0,1]])

B = np.array([[1,0,1],
              [1,1,0],
              [0,1,0]])

def angle(V1,V2):
    """
    angle between vectors V1 and V2 in degrees using
    angle = arccos ( V1 dot V2 / norm(V1) * norm(V2) ) *180/np.pi
    """

    cos_of_angle = V1.dot(V2) / (np.linalg.norm(V1) * np.linalg.norm(V2)) 
    return np.arccos(np.clip(cos_of_angle,-1,1))  * 180/np.pi

注意从rad到deg的换算比例项180 / np.pi。

我想要一个数组:

C = [ angle(A[0],B[0]) , angle(A[1],B[1])...... and so on]

非常感谢有人可以帮忙。

迪卡卡

我们可以用einsum它们代替点积计算和axis参数,norm以得到矢量化的解决方案,例如:

def angle_rowwise(A, B):
    p1 = np.einsum('ij,ij->i',A,B)
    p2 = np.linalg.norm(A,axis=1)
    p3 = np.linalg.norm(B,axis=1)
    p4 = p1 / (p2*p3)
    return np.arccos(np.clip(p4,-1.0,1.0))

我们可以进一步优化并引入更多的einsum,专门用于进行计算norms因此,我们可以像这样使用它-

def angle_rowwise_v2(A, B):
    p1 = np.einsum('ij,ij->i',A,B)
    p2 = np.einsum('ij,ij->i',A,A)
    p3 = np.einsum('ij,ij->i',B,B)
    p4 = p1 / np.sqrt(p2*p3)
    return np.arccos(np.clip(p4,-1.0,1.0))

因此,要解决我们的情况以获得度数的输出,

out = angle_rowwise(A, B)*180/np.pi

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

计算两个角度之间的绝对差

计算两个点阵列之间成对角度的矩阵

如何计算R中两个矩阵之间的欧式距离

在GLSL中计算两个向量之间的角度

如何使用numpy查找两个非常大的矩阵的行之间的成对差异?

如何有效地计算numpy中两个矩阵系列的外积?

R中两个矩阵之间的标识行

numpy中两个矩阵之间等于多少行

如何计算两个对象之间的相对姿势并将其放入转换矩阵中

如何计算矩阵中两个元素之间的最大欧几里得距离-R?

计算两个向量之间的角度

(速度挑战)用欧几里德距离来计算两个矩阵行之间的距离矩阵的更快方法?

使用numpy确定两个矩阵之间的距离

计算numpy中两个向量之间的成对差异?

计算两个角度之间的角度差

如何计算两个2D矩阵变换之间的角度?

计算两个矩阵的行之间的相关系数

计算两个对象之间的倾斜角度

计算两个向量之间的角度

在R中两个瘦高个矩阵之间计算按行点积的最快方法

如何在python(numpy)中更快地计算每行两个矩阵A和B的外积?

MYSQL-计算角度是否在两个角度之间

计算两个日期时间角度之间的时间

匹配两个矩阵之间的行

R如何计算两个矩阵行之间的差异?

如何计算R中对象(变量)和组(两个变量)之间的距离矩阵

计算两个角度之间的相对相位 - python

Numpy - 两个矩阵的行之间的协方差

计算两个坐标之间的角度?Python