Matlab 多单元参考
我有一个单元格数组,比如说C。每个单元格包含一个矩阵 例如,让我们假设C是Matlab 多单元参考,matlab,cell-array,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] 鉴于C始终是您指定的大小,您可以尝试以下相当笨拙的解决方案: C{1}=[1 2;3 4;5 6] C{2}=[7 8;9 10;11 12]
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]
鉴于
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);
一个稍微不那么笨拙的解决方案:
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中的所有矩阵大小都相同。非常感谢!这非常有效,但我不知道如果我在C中的元素数为n,并且每个单元格中的矩阵大小为p-by-q,那么在整形和挤压函数中应该改变什么。@Christos:只需将3替换为n
,将2替换为p
和q
。另外,您可能想看看我的解决方案。