【问题标题】:how to reshape a cell array to matrix in desired size如何将单元阵列重塑为所需大小的矩阵
【发布时间】:2015-07-26 11:05:03
【问题描述】:

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

谁能帮我用matlab做这个?

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

【问题讨论】:

    标签: matlab matrix reshape cell-array


    【解决方案1】:

    cell2mat 应该可以工作。根据您的需要,您可能需要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
    

    【讨论】:

      【解决方案2】:

      海伯特,

      我是否正确假设您调用的 M 实际上是来自您上一个 postc?问题是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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-17
        • 2015-09-21
        • 1970-01-01
        • 2011-01-16
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 2016-04-19
        相关资源
        最近更新 更多