Matlab中元素乘法的优先级

时间:2017-06-27 12:11:29

标签: matlab operator-precedence

Matlab的

ones(2,2)*2.*ones(2,2)

ans =

     2     2
     2     2

ones(2,2).*2*ones(2,2)

ans =

     4     4
     4     4

1 个答案:

答案 0 :(得分:6)

.**具有相同的优先级,因此您从左到右阅读表达式。

第一个创建所有1的2 x 2矩阵,将元素按比例缩放2,然后通过另一个相同大小的矩阵将矩阵乘以(即.*)矩阵,从而得出所有2的结果。请注意,执行2 * ones(2, 2)2 .* ones(2, 2)会产生与创建所有2的大小2 x 2的矩阵完全相同的结果。这是MATLAB的一些很好的语法糖。另请注意,反转操作数的顺序会产生相同的结果,因此ones(2, 2) * 2ones(2, 2) .* 2会得到相同的结果。

第二个创建所有1的2 x 2矩阵,将元素按比例缩放2然后矩阵乘法(即*)矩阵与所有1的矩阵,从而给你所有4s的结果。

元素乘法和矩阵乘法是两个完全不同的东西。前者确保两个矩阵的大小相同,除了其中一个操作数是标量,并创建一个与操作数大小相同的矩阵,输出中的每个元素乘以两个矩阵之间的相应位置。具体而言,假设C(i, j)是位置C(i, j)的输出矩阵C(i, j) = A(i, j) * B(i, j)。矩阵乘法是使用线性代数定律的两个矩阵的乘法。我不会侮辱你的智慧,并解释那些是你的个人资料所暗示的那些。

这并不神秘。如果你想说服自己,请从左到右输入表达式的每个部分,将以前的结果链接在一起,你就会发现它是正确的:

>> A = ones(2, 2)

A =

          1.00          1.00
          1.00          1.00

>> A = A * 2

A =

          2.00          2.00
          2.00          2.00

>> A = A .* ones(2, 2)

A =

          2.00          2.00
          2.00          2.00

>> B = ones(2, 2)

B =

          1.00          1.00
          1.00          1.00

>> B = B .* 2

B =

          2.00          2.00
          2.00          2.00

>> B = B * ones(2, 2)

B =

          4.00          4.00
          4.00          4.00

我还鼓励阅读有关两者之间差异的文档:https://www.mathworks.com/help/matlab/ref/times.htmlhttps://www.mathworks.com/help/matlab/ref/mtimes.html