在matlab中分离矩阵的某些部分

时间:2017-03-08 07:04:02

标签: matlab matrix

我有一个名为A的2m乘2矩阵和一个名为B的2乘m矩阵。让我们将A的乘积命名为B,C:     C = A * B;

其中C是2m×m矩阵。我想找到包含C的某些部分的矩阵F.F是2个矩阵,包含元素C(1,1),C(2,1),C(3,2),C(4,2), C(5,3),C(6,3),...... C(2m-1,m),C(2m,m)。 例如,考虑

A = [0,2;1,3;4,7;8,3;4,5;1,2]
B=[1,4,6;5,7,3]
C=A*B;

在这种情况下:

F=[C(1,1),C(2,1);C(3,2),C(4,2);C(5,3),C(6,3)]

但我喜欢在不计算C的所有元素的情况下找到F.因为我认为计算C的所有元素会浪费大量的m值。在一般情况下,有人会建议找到F的方法吗?

1 个答案:

答案 0 :(得分:0)

使用索引:

F = [C(1:2*m+2:end);C(2:2*m+2:end)]'

要查找F而不计算C,您可以使用:

F=cell2mat(arrayfun(@(x) A(2*x-1:2*x,:)*B(:,x), 1:m,'uniformoutput',0))'

(您必须按照问题中的定义设置m, A, and B

<强>说明: F的每一行都是A中子矩阵与B列的乘积的转置。例如,F中的第一行是转置:

A(1:2,:)*B(:,1)

下一行是转置:

A(3:4,:)*B(:,2)

因此,此方法仅计算必要的值,方法是将B的每一列仅乘以相应的A子矩阵,并避免计算C中未使用的值。