多个细胞参考

时间:2013-01-30 15:49:59

标签: matlab cell-array

我有一个单元格数组,让我们说C.每个单元格都包含一个矩阵。

例如,假设C是

C{1}=[1 2;3 4;5 6]
C{2}=[7 8;9 10;11 12]

如何创建新的单元格数组D,其i-th元素是由C中所有矩阵的i-th转置行组成的矩阵?

然后D必须

D{1}=[1 7;2 8]
D{2}=[3 9;4 10]
D{3}=[5 11;6 12]

2 个答案:

答案 0 :(得分:1)

稍微不那么笨拙的解决方案:

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)))

答案 1 :(得分:0)

鉴于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);
相关问题