由于您的子矩阵大小不同,您不能将它们放入 3D 数组中(没有 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 或@987654334 中的行数@。
或者,您可以使用循环将矩阵和向量划分为子矩阵,并将它们放入适当的单元格中。
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);