如何在matlab中对此矩阵乘法进行矢量化

Mar*_*n08 2 arrays matlab matrix

我有2个矩阵A(nxm)和B(nxd),并希望将A的每一列与B 行的元素相乘.A 有m列, B中有n个1xd向量,因此结果是m nxd矩阵.然后我想求和(result_i,1)得到m 1xd向量,我想应用vertcat来获得mxd矩阵.我正在使用for循环执行此操作,并且它很慢,因为n和d很大.如何在matlab中对其进行矢量化以使其更快?谢谢.

编辑:
你没事:我对自己的问题感到困惑.我的意思的"乘法逐元素每个A与B的行列"是乘以n,其中B的对应的n行我想与A的一个列做的所述的一列的元素作为随后(我对m列的A重复此操作,然后将C的向量一起拖动以获得mxd矩阵):

column_of_A =

     3
     3
     1


B =

     3     1     3     3
     2     2     1     2
     1     3     3     3


C = sum(diag(column_of_A)*B, 1)

     16    12    15    18
Run Code Online (Sandbox Code Playgroud)

Jon*_*nas 6

您可以通过以下方式对操作进行矢量化.但请注意,矢量化是以更高的内存使用量为代价的,因此解决方案最终可能无法为您工作.

%# multiply nxm A with nx1xd B to create a nxmxd array
tmp = bsxfun(@times,A,permute(B,[1 3 2]));

%# sum and turn into mxd
out = squeeze(sum(tmp,1));
Run Code Online (Sandbox Code Playgroud)

您可能希望在一行中完成所有操作,这可能有助于Matlab JIT编译器节省内存.

编辑

如果你没有,这是替换第一行的方法 bsxfun

[n,m] = size(A);
[n,d] = size(B);
tmp = repmat(A,[1 1 d]) .* repmat(permute(B,[1 3 2]),[1,m,1]);
Run Code Online (Sandbox Code Playgroud)