set*_*ets 2 arrays matlab vector vectorization matrix-multiplication
我有两个大小的矢量n和m
a = [a1 a2 ... an];
b = [b1 b2 ... bm];
Run Code Online (Sandbox Code Playgroud)
我想"乘以"它们来获得结果:
c =
a1*b1 a1*b2 ... a1*bm
a2*b1 a2*b2 ... a2*bm
. . .
. . .
an*b1 an*b2 ... an*bm
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来获得这样的结果而不诉诸于循环或矩阵?
应用于bsxfun以下版本的列版本a和行版本b:
a = 1:3; %// example input
b = 10:10:40; %// example input
c = bsxfun(@times, a(:), b(:).'); %'// or bsxfun(@times, b(:).', a(:));
Run Code Online (Sandbox Code Playgroud)
结果:
c =
10 20 30 40
20 40 60 80
30 60 90 120
Run Code Online (Sandbox Code Playgroud)或者,可能更快,使用矩阵乘法的a作为列向量倍b为行向量,按该顺序:
c = a(:)*b(:).';
Run Code Online (Sandbox Code Playgroud)你想要什么也可以解释为Kronecker产品,所以你可以使用kron:
c = kron(a(:), b(:).'); %'// or kron(b(:).', a(:))
Run Code Online (Sandbox Code Playgroud)