Матричное разбиение Matlab - PullRequest
0 голосов
/ 15 ноября 2011

Я хотел бы разделить матрицу по приблизительному количеству строк. Например, если у меня есть матрица с этими размерами 155 x 1000, как я могу разделить ее на 10, где каждая новая матрица имеет приблизительные размеры 15 X 1000?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Как насчет этого:

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]
0 голосов
/ 15 ноября 2011

Это то, что вы хотите?

%Setup
x = rand(155,4);  %4 columns prints on my screen, the second dimension can be any size
n = size(x,1);
step = round(n/15);

%Now loop through the array, creating partitions
%    This loop just displays the partition plus a divider
for ixStart = 1:step:n
    part = x(  ixStart:(min(ixStart+step,end))  ,  :  );
    disp(part);
    disp('---------')
end

Единственная хитрость здесь - это использование ключевого слова end в оценке функции при подписке. Без использования ключевого слова вы можете использовать size(x,1), но это немного сложнее для чтения.

...