如何将元胞数组重塑为所需大小的矩阵

how to reshape a cell array to matrix in desired size

我有一个 2*2 元胞数组,它的每个元素都是一个名为 m1、m2、m3 的 2*2 矩阵,m4.I 想将此元胞数组转换为大小为 4*4 的矩阵这样我的生成矩阵将是 M=[m1 m2;m3 m4]。我尝试使用 cell2mat 函数,它给我 2*8 矩阵,然后将其重塑为 4*4,但这不起作用。

谁能帮我用 matlab 做这个?

请给出不同大小的元胞数组和矩阵大小的通用代码,因为在我的代码中,基于输入数字的元胞数组和矩阵大小会发生变化。

cell2mat should work. Depending on what you want, you may need a transpose:

>> m1 = [1 2; 3 4];
>> m2 = [11 12; 13 14];
>> m3 = [21 12; 23 14];
>> m4 = [31 32; 33 34];
>> myCell = {m1, m2; m3 m4};
>> cell2mat(myCell)
ans =
     1     2    11    12
     3     4    13    14
    21    12    31    32
    23    14    33    34
>> cell2mat(myCell.')
ans =
     1     2    21    12
     3     4    23    14
    11    12    31    32
    13    14    33    34

海伯特,

我假设你所说的 M 实际上是你上次 c 是否正确?问题是 c 是一个 2x2 元胞数组,其中每个元素都是 1x4。

如果我们修改我在那里发布的内容。并让 M 成为您想要的每个子矩阵的形状(M 是一个具有 2x2 子矩阵的 2x2 元胞数组)。注意我修改了c的定义。我们可以得到你想要的。

M = reshape(arrayfun(@(i) randi(100, 2, 2), 1:4, 'uni', 0), 2,2);
c = cellfun(@(x) reshape(x, size(M)), reshape(num2cell(cell2mat(cellfun(@(m) m(:), M(:)', 'uni', 0)), 2), size(M{1})), 'uni', 0);
cMatrix = cell2mat(c);