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
答案 0 :(得分:6)
.*
和*
具有相同的优先级,因此您从左到右阅读表达式。
第一个创建所有1的2 x 2
矩阵,将元素按比例缩放2,然后通过另一个相同大小的矩阵将矩阵乘以(即.*
)矩阵,从而得出所有2的结果。请注意,执行2 * ones(2, 2)
和2 .* ones(2, 2)
会产生与创建所有2的大小2 x 2
的矩阵完全相同的结果。这是MATLAB的一些很好的语法糖。另请注意,反转操作数的顺序会产生相同的结果,因此ones(2, 2) * 2
和ones(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.html,https://www.mathworks.com/help/matlab/ref/mtimes.html。