Matlab - 如何对两个矩阵之间的每一行执行操作?

Posted

技术标签:

【中文标题】Matlab - 如何对两个矩阵之间的每一行执行操作?【英文标题】:Matlab - How to perform operations on each row between two matrices? 【发布时间】:2019-10-16 23:58:49 【问题描述】:

我有两个矩阵,每个矩阵都包含两个向量(每一行都是一个向量):

u = [1 0 0; 2 0 0]
v = [1 1 0; 2 2 0]

我想计算矩阵中相应行的向量之间的两个角度([1 0 0] , [1 1 0] 之间的角度和[2 0 0] , [2 2 0] 之间的角度)。在此示例中,两个角度均为 45 度。所以我想要的是一个这样的新矩阵:

angles = [45; 45]

当我尝试这个时:

u = [1 0 0; 2 0 0]
v = [1 1 0; 2 2 0]
dp = u(:,1) .* v(:,1) + u(:,2) .* v(:,2) + u(:,3) .* v(:,3);
angles = atan2d(norm(cross(u,v)),dp)

答案是:

angles = [76.3670 ; 45.8683]

当我尝试这个时(将 norm 更改为 normr):

u = [1 0 0; 2 0 0]
v = [1 1 0; 2 2 0]
dp = u(:,1) .* v(:,1) + u(:,2) .* v(:,2) + u(:,3) .* v(:,3);
angles = atan2d(norm(cros-s-r(u,v)),dp)

答案是:

angles = [0 0 45.0000 ; 0 0 14.0362]

如何让它计算每行向量之间的角度?

【问题讨论】:

norm(cross(u,v)) 返回一个标量,而不是一个向量(矩阵范数,而不是两个向量范数)。 【参考方案1】:

试试:

u=[1 0 0;2 0 0];
v = [1 1 0;2 2 0];
atan2(cross(u,v,2),dot(u,v,2)) % radians
atan2d(cross(u,v,2),dot(u,v,2)) % degrees

cross 和 dot 函数中的 ,2 指定要操作的维度,因为您将每个向量存储在一行中。

有一个讨论here,有许多其他计算方法,您可能会找到更适合您的特定应用案例的方法。

【讨论】:

以上是关于Matlab - 如何对两个矩阵之间的每一行执行操作?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 matlab 矩阵的每一行和没有循环的向量之间找到共同值吗?

Matlab中的左循环移位,用于不同数量位置的矩阵的每一行

如何将给定矩阵的每一行中的所有元素与给定向量的相应元素相乘并在 MATLAB 中求和?

对矩阵中的每一行执行 t 检验 - 处理 NA

sum()函数——MATLAB

Matlab求两个向量之间的各种距离