1

<12x1セル>の2つのセル配列があり、AとBのラベルが付いています。それぞれに<45x13double>の12個の行列が含まれています。各セルの中には、A1、A2、... A12とB1、B2、...B12の行列があります。

方程式の12個のインスタンスを書き出すことなく、方程式の出力で各ペアを考慮に入れる方法はありますか?

したがって、ペア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 に答える