2016-11-15 105 views
0

我有AB里面的矩阵单元阵列。我想获得C矩阵乘法矢量化cellarray

A = 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 

B = 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 
    [18x18 double] 

K = magic(18); 

在for循环:

C = cell(8,1); 
for ii = 1:8 
    C{ii} = K*A{ii}'*B{ii}; 
end 

我怎样才能在矢量形式(小区)这样做呢?

+0

我没有看到你如何矢量化没有将单元格阵列转换为多维数组 –

+0

@Luis Mendo我的意思是我想在结果C的末尾转换回单元格数组。在这个过程的中间,我可以使用多维度数组。但我仍然希望使用单元格来存储所有矩阵。 – petersen

回答

0

虽然这是可能的,

K = repmat({K}, 8,1); 
C = spblkdiag(K{:}) * spblkdiag(A{:}).' * spblkdiag(B{:}); 
C = reshape(nonzeros(C), 18,[]); 
C = mat2cell(C, 18,18 * ones(8,1))'; 

我还是建议你使用一个循环。