如何将公式应用于< 12x1单元>的单元阵列。

时间:2012-08-02 15:19:08

标签: matlab matrix cell

我有两个细胞阵列是< 12x1细胞>并且它们标记为A和B.每个包含12个矩阵,其为< 45x13 double>每。在每个单元格内部都有矩阵:A1,A2,... A12和B1,B2,...... B12。

有没有办法让方程式输出考虑每一对而不必写出方程式的十二个实例?

因此,创建一个新矩阵,其中包含在A1和B1,A2和B2对上运行此计算的结果,... A12,B12

例如:

averageB = sum(B)/length(B);
averageA = sum(A)/length(A);
tapWithSign = (averageB - averageA) ./ (averageB + averageA / 2) * 100;
tapAB = abs(tapWithSign); 

1 个答案:

答案 0 :(得分:2)

方法#1

直接的方法是使用for循环:

C = [];
for i = 1:numel(A);
    C(i).averageB = sum(B{i}) / length(B{i});
    C(i).averageA = sum(A{i}) / length(A{i});
    C(i).tapWithSign = (C(i).averageB - C(i).averageA) ./ ...
       (C(i).averageB + C(i).averageA / 2) * 100;
    C(i).tapAB = abs(tapWithSign{i});
end

我不确定您希望如何存储结果,因此我将它们存储在C中,这是一个结构数组,计算结果为字段。


方法#2

或者,您可以像这样使用cellfun

averageA = cellfun(@(x)(sum(x)/length(x)), A, 'Un', 0);
averageB = cellfun(@(x)(sum(x)/length(x)), B, 'Un', 0);
tapWithSign = cellfun(@(x, y)deal((y - x) ./ (y + x / 2) * 100), ...
    averageA, averageB, 'Un', 0);
tapAB = cellfun(@abs, tapWithSign, 'Un', 0);

请注意,这会将计算结果生成为单元格数组。如果要将它们存储在结构中,就像在第一个示例中那样:

C = struct('averageA', averageA, 'averageB', averageB, ...
    'tapWithSign', tapWithSign, 'tapAB', tapAB);