在matlab中没有for循环的行和列的矩阵乘法

Par*_*mar 3 matlab matrix

我有以下问题,并没有想到没有for循环的方法.

考虑两个矩阵:

a=rand(N,3), b=rand(3,N)

我想得到的是:( b(:, i)*a(i, :)一个3*3矩阵)在所有的第三维中连接起来i.

因此,对于上述示例,结果应该是(3*3*N)矩阵.

Flo*_*ian 6

Matlab R2016b版:

c = reshape(a.',[1,3,N]) .* reshape(b,[3,1,N]);
Run Code Online (Sandbox Code Playgroud)

早期的Matlab版本:

c = repmat(reshape(a.',[1,3,N]),[3,1,1]) .* repmat(reshape(b,[3,1,N]),[1,3,1]);
Run Code Online (Sandbox Code Playgroud)

编辑:这是Matlab R2016b(Win7x64)的快速基准测试.矢量化的加速大约是50倍.

R2016b基准测试(Win7x64)

  • 在Matlab的说法中,它被称为Binary Singleton Expansion.从R2016开始,Matlab会自动执行此操作,之后您必须调用`bsxfun`或像我一样使用`repmat`. (2认同)