1

我有两个单元格数组,它们是 <12x1 cell>,它们分别标记为 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); 
4

1 回答 1

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);
于 2012-08-02T15:31:48.467 回答