私はセル配列を持っています.Cとしましょう。各セルには行列が含まれています。
たとえば、C が
C{1}=[1 2;3 4;5 6]
C{2}=[7 8;9 10;11 12]
C のすべての行列i-th
の転置された行で構成される行列を要素とする新しいセル配列 D を作成するにはどうすればよいですか?i-th
その場合、D は
D{1}=[1 7;2 8]
D{2}=[3 9;4 10]
D{3}=[5 11;6 12]
私はセル配列を持っています.Cとしましょう。各セルには行列が含まれています。
たとえば、C が
C{1}=[1 2;3 4;5 6]
C{2}=[7 8;9 10;11 12]
C のすべての行列i-th
の転置された行で構成される行列を要素とする新しいセル配列 D を作成するにはどうすればよいですか?i-th
その場合、D は
D{1}=[1 7;2 8]
D{2}=[3 9;4 10]
D{3}=[5 11;6 12]
少し不器用な解決策:
C{1}=[1 2;3 4;5 6]
C{2}=[7 8;9 10;11 12]
tmp = cat(3,C{:});
tmp = permute(tmp, [3 2 1]) %# now every slice is of the right form
szTmp = size(tmp);
D = mat2cell(tmp,szTmp(1),szTmp(2),ones(szTmp(3),1)))
それC
が常に指定したサイズであることを考えると、次のやや不器用な解決策を試すことができます。
C{1}=[1 2;3 4;5 6]
C{2}=[7 8;9 10;11 12]
tmp = reshape( [C{:}]', 2,2,3);
D = arrayfun(@(x) squeeze(tmp(:,:,x)), 1:3, 'UniformOutput', false);
これにより、
>> D{:}
ans =
1 7
2 8
ans =
3 9
4 10
ans =
5 11
6 12
任意のサイズの行列の場合、次を使用できます
n = length(C);
[q,p] = size(C{1});
tmp = reshape( [C{:}]', p, n, q);
D = arrayfun(@(x) squeeze(tmp(:,:,x)), 1:n, 'UniformOutput', false);