Search code examples
matlabmatrixpartition-problem

Matlab matrix partitioning


I would like to partition a matrix by an approximate even amount of rows. For example, if I have a matrix by these dimensions 155 x 1000, how can I partition it by 10 where each new matrix has the approximate dimensions 15 X 1000?


Solution

  • How about this:

    inMatrix = rand(155, 1000);
    numRows  = size(inMatrix, 1);
    numParts = 10;
    
    a = floor(numRows/numParts);          % = 15
    b = rem(numRows, numParts);           % = 5
    partition = ones(1, numParts)*a;      % = [15 15 15 15 15 15 15 15 15 15]
    partition(1:b) = partition(1:b)+1;    % = [16 16 16 16 16 15 15 15 15 15]
    disp(sum(partition))                  % = 155
    
    % Split matrix rows into partition, storing result in a cell array
    outMatrices = mat2cell(inMatrix, partition, 1000)
    
    outMatrices = 
    [16x1000 double]
    [16x1000 double]
    [16x1000 double]
    [16x1000 double]
    [16x1000 double]
    [15x1000 double]
    [15x1000 double]
    [15x1000 double]
    [15x1000 double]
    [15x1000 double]