Matlab中元素乘法的优先级

Raj*_*aju 3 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
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 7

.*并且*是相同的优先级,因此您从左到右阅读表达式.

第一个创建2 x 2所有1 的矩阵,将元素按比例缩放2然后逐个元素地.*将矩阵乘以所有相同大小的另一个矩阵,从而得到所有2的结果.请注意,执行2 * ones(2, 2)2 .* ones(2, 2)给出与创建2 x 2所有2 的大小矩阵完全相同的结果.这是MATLAB的一些很好的语法糖.还要注意的是扭转操作数的顺序给出相同的结果,所以ones(2, 2) * 2ones(2, 2) .* 2给出了相同的结果.

第二个创建2 x 2所有1 的矩阵,将元素按比例缩放2然后矩阵乘以(即*)矩阵与所有1的另一个矩阵,从而得到所有4的结果.

元素乘法和矩阵乘法是两个完全不同的东西.前者确保两个矩阵的大小相同,除了其中一个操作数是标量,并创建一个与操作数大小相同的矩阵,输出中的每个元素乘以两个矩阵之间的相应位置.具体地说,假设这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
Run Code Online (Sandbox Code Playgroud)

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