没有循环或矩阵的乘法
Multiplication without loop or matrixes
我有两个大小为 n
和 m
的向量
a = [a1 a2 ... an];
b = [b1 b2 ... bm];
我想"multiply"他们获得结果:
c =
a1*b1 a1*b2 ... a1*bm
a2*b1 a2*b2 ... a2*bm
. . .
. . .
an*b1 an*b2 ... an*bm
有没有什么简单的方法可以不求助于循环或矩阵来获得这样的结果?
将bsxfun
应用于a
的列版本和b
的行版本:
a = 1:3; %// example input
b = 10:10:40; %// example input
c = bsxfun(@times, a(:), b(:).'); %'// or bsxfun(@times, b(:).', a(:));
结果:
c =
10 20 30 40
20 40 60 80
30 60 90 120
或者,可能更快,使用 a
的 matrix multiplication 作为列向量乘以 b
作为行向量,顺序为:
c = a(:)*b(:).';
你想要的也可以解释为Kronecker product, so you can use kron
:
c = kron(a(:), b(:).'); %'// or kron(b(:).', a(:))
我有两个大小为 n
和 m
a = [a1 a2 ... an];
b = [b1 b2 ... bm];
我想"multiply"他们获得结果:
c =
a1*b1 a1*b2 ... a1*bm
a2*b1 a2*b2 ... a2*bm
. . .
. . .
an*b1 an*b2 ... an*bm
有没有什么简单的方法可以不求助于循环或矩阵来获得这样的结果?
将
bsxfun
应用于a
的列版本和b
的行版本:a = 1:3; %// example input b = 10:10:40; %// example input c = bsxfun(@times, a(:), b(:).'); %'// or bsxfun(@times, b(:).', a(:));
结果:
c = 10 20 30 40 20 40 60 80 30 60 90 120
或者,可能更快,使用
a
的 matrix multiplication 作为列向量乘以b
作为行向量,顺序为:c = a(:)*b(:).';
你想要的也可以解释为Kronecker product, so you can use
kron
:c = kron(a(:), b(:).'); %'// or kron(b(:).', a(:))