【发布时间】:2013-03-26 11:26:28
【问题描述】:
* 和 .* 在 Matlab 中有什么区别?
【问题讨论】:
* 和 .* 在 Matlab 中有什么区别?
【问题讨论】:
* 是向量或矩阵乘法
.* 是元素乘法
a = [ 1; 2]; % column vector
b = [ 3 4]; % row vector
a*b
ans =
3 4
6 8
同时
a.*b.' % .' means tranpose
ans =
3
8
【讨论】:
.'(点撇号)在 MATLAB 中表示转置。只是'(撇号)是复共轭转置。
' 的意思是ctranspose! :)
a.*b,我会得到与a*b 相同的结果。在我的代码中没有.' .* 在没有转置的情况下有用吗?
* 是矩阵乘法,而.* 是元素乘法。
为了使用第一个运算符,操作数在大小方面应遵守矩阵乘法规则。
对于第二个运算符,向量长度(垂直或水平方向可能不同)或矩阵大小对于元素乘法应该相等
【讨论】:
* 是矩阵乘法,.* 是元素数组乘法
我创建了这个简短的脚本来帮助澄清关于两种乘法形式的挥之不去的问题......
%% 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
脚本结果:
一个=
1
2
b =
3 4
矩阵乘法:a*b
ans =
3 4
6 8
元素乘法:a.*b
ans =
3 4
6 8
c =
1 2 3
1 2 3
d =
2 4 6
矩阵乘法 (3 X 2) * (3 X 1): c*d'
ans =
28
28
逐元素乘法 (3 X 2) .* (1 X 3): c.*d
ans =
2 8 18
2 8 18
【讨论】: