Matlab矢量乘以单元格数组

时间:2013-11-21 04:05:55

标签: matlab matrix

我有一个向量x = [1 2 3]和一个3乘3的单元格数组C,它由N个N矩阵组成。例如。 C{1,1}是N×N矩阵。

我希望将xC相乘,得到大小为1的单元格数组D

D{1,1} = x(1)C{1,1) + x(2)C{2,1} + x(3)C{3,1} 
D{1,2} = x(1)C{1,2) + x(2)C{2,2} + x(3)C{3,2} 
D{1,3} = x(1)C{1,3) + x(2)C{2,3} + x(3)C{3,3}

2 个答案:

答案 0 :(得分:3)

没有展开的循环

对于长度为x的矢量M=3M-by-M单元阵列C,我们的想法是形成M*N-by-M矩阵,其中列{ {1}}由单元格i中的所有值组成。然后,您可以使用C{i,:}的矩阵乘法来获取x.'D中的值,以将结果分解为新的单元格数组。

mat2cell

测试数据:

Ct = C';
Dvals = reshape([Ct{:}],[],M)*x.';
D = mat2cell(reshape(Dvals,N,[]),N,N*ones(M,1))

注意:这要求每个子矩阵的大小与问题中的相同。

答案 1 :(得分:0)

没有循环:

D = cell(1, 3);
D{1} = x(1) * C{1,1} + x(2) * C{2,1} + x(3) * C{3,1};
D{2} = x(1) * C{1,2} + x(2) * C{2,2} + x(3) * C{3,2};
D{3} = x(1) * C{1,3} + x(2) * C{2,3} + x(3) * C{3,3};

有一个循环:

D = cell(1, 3);
for i=1:3
    D{i} = x(1) * C{1,i} + x(2) * C{2,i} + x(3) * C{3,i};
end

有两个循环:

D = cell(1, 3);
for i=1:3
    D{i} = x(1) * C{1,i};
    for j=2:3
        D{i} = D{i} + x(j) * C{j,i};
    end
end