あなたのセルを平らに。コード検証を容易にするために、それぞれの値は、元の位置/インデックスに関する情報(パターン:ab.cd
)によって構築されます。たとえば、A{1,4}{2,3}
には、値14.23
が与えられます。 % Index size
a = 5;
b = 4;
c = 3;
d = 2;
% Cell values
[ai, bi] = ind2sub([a b], 1:a*b);
abVal = 10*ai + bi;
[ci,di] = ndgrid(1:c,1:d);
cdVal = ci/10+di/100;
% Built up A
A = cell(a,b);
for i = 1:numel(A)
A{i} = num2cell(abVal(i) + cdVal);
end
num2cell
は本当にここに必要ではありませんが、もっと自分のデータを模倣することがあります。番号(セルではない)またはより深くネストされたセルがある場合は、下の最後の行に中括弧{:}
の代わりにかっこ(:)
を使用する必要があります。しかし、この例では以下のことが行われます。
% Flatten the 2-level nested cell (could use vercat instead of horcat)
A_flat = horzcat(A{:});
A_flat = horzcat(A_flat{:}); % Could also use [A_flat{:}] here
今値が偶数インデックスの距離に配置され、エヴェーレc x b
値を選択しているという事実を使用します。ここで
% Built up re-arrange cell
A_reOrdered = cell(c,d);
for i = 1:c*d
A_reOrdered{i} = reshape(A_flat(i:c*d:end), a, b);
end
、私は実際にA{c,d}(a,b)
にA{a,b}{c,d}
から変換しています。あなたはA{c,d}{a,b}
すなわち下部のセル構造をしたい場合は、単にいくつかの例for
ループ
にreshape
前num2cell
を置くことvalus:もともと
>> A{5,2}{3,1}
ans =
52.31
に置いた >> A_reOrdered{3,1}
ans =
11.31 12.31 13.31 14.31
21.31 22.31 23.31 24.31
31.31 32.31 33.31 34.31
41.31 42.31 43.31 44.31
51.31 52.31 53.31 54.31
>> A_reOrdered{3,1}(5,2)
ans =
52.31
しかし、目標が実際にはいくつかの合計を計算することだった場合は、平坦化ステップの後に停止し、そのデータを直接。 A_flat
のパターンを調べてみてください。特定 'B'
nB = a*c*d;
for ib = 1:b
bSum(ib) = sum(A_flat((ib-1)*nB + (1:nB)));
end
% ... or without the for-loop
bSum = arrayfun(@(x) sum(A_flat(x + (1:nB))), nB*(0:b-1));
bSum =
936.45 966.45 996.45 1026.5
のすべての値を合計する。例えば