包含2-D变维矩阵的单元格

时间:2014-05-14 22:00:02

标签: matlab

我有一个很大的2D矩阵,例如1000×10。我试图将该矩阵分成多个2D矩阵。它们可以是10乘10,5乘10或23乘10.列大小不会改变,我根据第一列中的数字拆分它们。 (在我的真实情况下,我是为前两列做的。)换句话说,我将具有相同id标记的行放入,这是向量的第一个列值。

我试图通过for循环实现这一点。我认为最好把它们放入一个“电池阵列”中。因为单元格数组允许用户拥有不同维度和不同类型的数据。所以,我想要一个单元格(1-by-varying-N?),其中N是分裂的矩阵数,并且有N个不同大小的2D矩阵。

我的问题是

  1. 在这种情况下,我应该将单元格视为三维?

  2. 如何初始化具有不同维度的单元格?

  3. 鉴于我在n-by-m中有二维矩阵,我如何将矩阵插入一个单元格?

  4. 没有很多具有不同细胞尺寸的参考文献。任何提示/答案都会非常感激。

2 个答案:

答案 0 :(得分:2)

这是一个简单的例子,向您展示如何将数组输出到单元格中:

A=cell(2,1); % create a 2x1 cell array
A{1}=ones(3); % put a 3x3 matrix into the first cell
A{2}=rand(5); % put a 5x5 array into the second cell
A{3}=zeros(2); % grow the cell array to 3x1 and put a 2x2 matrix in the third cell
A % see what A looks like

因此,您可以增加单元格数组,例如在for循环中,例如:

A=cell(5,1);    
for i=1:5
    A{i}= ...
end

答案 1 :(得分:1)

  1. 在这种情况下,不建议使用3D单元格数组。只需使用1D单元阵列并将2D数组放在其中。

  2. 您可以使用myCell = cell(44,1)

  3. 初始化单元格数组
  4. 您可以使用myCell{4} = data(1:23, :)
  5. 填充单元格

    例如,您可以编写以下代码:

    % Create some arbitrary data:
    data = (1:1000)'*(1:10);
    blockSize = 23;
    
    % Create a cell array from scratch:
    myCell2 = cell(ceil(1000/blockSize),1);
    
    for ind = 1:ceil(1000/blockSize)
        myCell2{ind} = data((ind-1)*blockSize +1 : min(ind*blockSize, end),:);
    end
    

    但我建议避免使用for循环并使用函数mat2cell(...),而不是这样:

    % Create some arbitrary data:
    data = (1:1000)'*(1:10);
    
    blockSize = 23;
    
    % Break it up with mat2cell:
    myCell = mat2cell(data, [ones(44,1)*23; 11], 10)
    
    % And just for fun, do a calcuation:
    cellfun(@norm, myCell)