Matlab中元素乘法的优先级

Precedence of elementwise multiplication in Matlab

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

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

第一个创建一个 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然后矩阵乘(即*)矩阵另一个矩阵,因此给你一个全 4 的结果。

逐元素乘法和矩阵乘法是完全不同的两个东西。前者确保两个矩阵的大小相同,但其中一个操作数是标量,并创建一个与任一操作数大小相同的矩阵,输出中的每个元素乘以两个矩阵之间的相应位置.具体来说,假设 C(i, j) 是位置 (i, j)C(i, j) = A(i, j) * B(i, j) 处的输出矩阵 C。矩阵乘法是使用线性代数定律将两个矩阵相乘。我不会侮辱你的智慧并解释这些是什么,因为你的个人资料暗示你是一名数学家。

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

>> 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.html, https://www.mathworks.com/help/matlab/ref/mtimes.html