在Matlab中,
*
和.*
有什么区别?*
代表矩阵或向量乘法
.*
代表逐元素相乘
.*
represents element-wise multiplication.a = [ 1; 2]; % column vector
b = [ 3 4]; % row vector
a*b
ans =
3 4
6 8
< p > 当 < /p >a.*b.' % .' means tranpose
ans =
3
8
.'
(点撇号)表示转置操作。而'
(撇号)则表示共轭转置操作。 - Eitan T'
表示 ctranspose
! :) - Edrica.*b
,那么得到的结果与 a*b
相同。在我的代码中没有 .'
。如果没有转置,.*
有用吗? - SeanJ*
是矩阵乘法运算符,而.*
是逐元素相乘运算符。*
是矩阵乘法,而.*
是逐元素数组乘法。
我创建了这个简短的脚本来帮助澄清关于这两种乘法形式的疑问...
%% Difference between * and .* in MatLab
% * is matrix multiplication following rules of linear algebra
% See MATLAB function mtimes() for help
% .* is Element-wise multiplication follow rules for array operations
% Also called: Hadamard Product, Schur Product and broadcast
% mutliplication
% See MATLAB function times() for help
% Given: (M x N) * (P x Q)
% For matrix multiplicaiton N must equal P and output would be (M x Q)
%
% For element-wise array multipication the size of each array must be the
% same, or be compatible. Where compatible could be a scalar combined with
% each element of the other array, or a vector with different orientation
% that can expand to form a matrix.
a = [ 1; 2] % column vector
b = [ 3 4] % row vector
disp('matrix multiplication: a*b')
a*b
disp('Element-wise multiplicaiton: a.*b')
a.*b
c = [1 2 3; 1 2 3]
d = [2 4 6]
disp("matrix multiplication (3 X 2) * (3 X 1): c*d'")
c*d'
disp('Element-wise multiplicaiton (3 X 2) .* (1 X 3): c.*d')
c.*d
% References:
% https://www.mathworks.com/help/matlab/ref/times.html
% https://www.mathworks.com/help/matlab/ref/mtimes.html
% https://www.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html
脚本结果:
a =
1
2
b =
3 4
矩阵乘法:a*b
答案 =
3 4
6 8
逐元素乘法:a.*b
答案 =
3 4
6 8
c =
1 2 3
1 2 3
d =
2 4 6
矩阵乘法(3 X 2)*(3 X 1):c*d'
答案 =
28
28
逐元素乘法(3 X 2).*(1 X 3):c.*d
答案=
2 8 18
2 8 18