Поскольку ваши подматрицы не имеют одинаковый размер, вы не можете поместить их в трехмерный массив (без NaN или заполнения нулями). Таким образом, вы можете использовать cell
. Для этого с помощью mat2cell
необходимо указать, сколько строк исходной матрицы следует поместить в каждую отдельную запись ячейки:
X = rand(122,125973);
Y = rand(1,125973);
% your number of rows per 'block'
n = 1024;
% the number of cols per cell entry:
colDist = [repelem(n, floor(size(X,2)/n)) rem(size(X,2),n)];
Xcell = mat2cell(X, size(X,1), colDist);
Ycell = mat2cell(Y, size(Y,1), colDist);
Здесь repelem(n, floor(size(X,2)/n))
повторяет n
для количества раз, n
вписывается в число столбцов X
. Затем я добавляю остаток от числа столбцов в конце (rem(size(X,2),n)
) этого деления к этому вектору строк colDist
.
При вызове mat2cell
(mat2cell(X, rowDist, colDist)
) второй аргумент rowDist
должен содержать количество строк в каждой ячейке, которое для каждой записи в ячейке будет равно количеству строк в X
или * 1018. *.
Кроме того, вы можете использовать цикл, чтобы разделить матрицу и вектор на подматрицы и поместить их в соответствующую ячейку.
Xcell = cell(ceil(size(X,2)/n),1);
Ycell = cell(ceil(size(X,2)/n),1);
% put in the blocks of n rows
for k = 1:floor(size(X,2)/n)
indices = n*(k-1)+1:n*k;
Xcell{k} = X(:,indices);
Ycell{k} = Y(:,indices);
end
% and the remainder:
Xcell{end} = X(:, indices(end)+1:end);
Ycell{end} = Y(:, indices(end)+1:end);