在matlab中,*和.*有什么区别?

20
在Matlab中,*.*有什么区别?

请参阅这个问题 - Cris Luengo
3个回答

17

*代表矩阵或向量乘法 .*代表逐元素相乘


.* 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

2
在MATLAB中,.'(点撇号)表示转置操作。而'(撇号)则表示共轭转置操作。 - Eitan T
1
嗨@EitanT - 我的工作就是指出 ' 表示 ctranspose ! :) - Edric
@Nick 如果我执行 a.*b,那么得到的结果与 a*b 相同。在我的代码中没有 .'。如果没有转置,.* 有用吗? - SeanJ

8
*是矩阵乘法运算符,而.*是逐元素相乘运算符。
使用第一个运算符时,操作数的大小应满足矩阵乘法规则。
对于第二个运算符,向量长度(垂直或水平方向可能不同)或矩阵大小应相等以进行逐元素乘法。

0

* 是矩阵乘法,而.*是逐元素数组乘法。

我创建了这个简短的脚本来帮助澄清关于这两种乘法形式的疑问...

%% 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接