如何将单元阵列重塑为所需大小的矩阵

时间:2015-07-26 11:05:04

标签: matlab matrix reshape cell-array

我有一个2 * 2的单元格数组,它的每个元素都是一个名为m1,m2,m3,m4的2 * 2矩阵。我想将这个单元格数组转换为大小为4 * 4的矩阵,这样我才能生成矩阵将是M = [m1 m2; m3 m4]。我尝试使用cell2mat函数,它给出了2 * 8矩阵,然后将其重新整形为4 * 4,但这不起作用。

有人可以帮我用matlab做这个吗?

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

Haybert,

我是否正确地假设您之前M的电话c实际上是c?问题是M是一个2x2单元格数组,其中每个元素都是1x4。

如果我们修改我在那里发布的内容。并且M是您希望每个子矩阵的形状(c是具有2x2子矩阵的2x2单元阵列)。注意我修改了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); 的定义。我们可以得到你想要的东西。

String(parseInt("123"))=="123" // true
String(parseInt("123.sdfs"))=="123.sdfs" //false