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