如何在Matlab中将矩阵与单元格数组的每个单元相乘?

时间:2014-12-02 10:05:33

标签: arrays matlab cell product

我有一个4D数组A大小(l,k,s,r)和一个单元数组B size(i,j),其中每个单元格中有一个不同的4D系数大小(存储l,k,s,r。

我希望在没有C循环的情况下对大小(i,j)= C(i,j) + sum(sum(sum(sum(A.*B{i,j}))))的给定数组for进行更改。

换句话说,我需要逐个从单元格数组B中提取所有数组并与A相乘。

使用for循环我这样做:

for i=1:length_of_first_dimension
    for j=1:length_of_second_dimension
        B_4D=B{i,j};       % extraction of 4D array
        dummy(i,j)=sum(sum(sum(sum(B_4D.*A))));
    end
end
C=C+dummy;

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

首先,reshape B加入(length_of_first_dimension*length_of_second_dimension) - by - l*k*s*r 2D矩阵

rB = cellfun( @(x) x(:).', B, 'uni', 0 ); %'
rB = vertcat(rB{:});

现在,reshape A加入l*k*s*r - 1列向量

rA = A(:);

简单地将它们相乘

rDummy = rB * rA; %// does the elem-wise product and summation quite quickly.  

重塑结果

dummy = reshape(rDummy, size(B) );
C = C + dummy;

正如Divakar所指出的,reshape B更有效的方法是

rB = reshape( cat( 5, B{:} ), numel(A), [] ).';

可以找到一个小基准here