20

Matlab中的*和有什么区别?.*

4

3 回答 3

16

*是向量或矩阵乘法 .*是元素乘法

a = [ 1; 2]; % column vector
b = [ 3 4]; % row vector

a*b

ans =

     3     4
     6     8

尽管

a.*b.' % .' means tranpose

ans =

     3
     8
于 2013-04-04T11:58:59.803 回答
8

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

为了使用第一个运算符,操作数在大小方面应遵守矩阵乘法规则。

对于第二个运算符,向量长度(垂直或水平方向可能不同)或矩阵大小对于元素乘法应该相等

于 2013-04-04T11:55:35.827 回答
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

脚本结果:

一个=

 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
于 2021-11-16T04:49:38.757 回答