我想将矩阵N * 123456更改为单元格单元格,每个子单元格包含一个N * L矩阵
例如:
matrixSize= 50*123456
N=50
L=100
输出为1 * 1235个单元格,每个单元格有一个50 * L矩阵(最后一个单元格只有50 * 56)
我知道matlab中有一个函数mat2cell:
Output = mat2cell(x, [50], [100,100,100,......56])
但它并不是一个直观的解决方案。
那么有一个很好的解决方案吗?
答案 0 :(得分:4)
如果我理解正确,假设你的矩阵用m
表示,这就是你想要的:
a=num2cell(reshape(m(:,1:size(m,2)-mod(size(m,2),L)),N*L,[]),1);
a=cellfun(@(n) reshape(n,N,L), a,'UniformOutput',false);
a{end+1}=m(:,end-mod(size(m,2),L)+1:end);
(如果您愿意,可以缩短为一行)...... 让我们用一些最小的数字进行测试:
m=rand(50,334);
N=50;
L=100;
的产率:
a =
[50x100 double] [50x100 double] [50x100 double] [50x34 double]
请注意,我没有检查重塑中的确切尺寸,因此您可能需要重塑为...,[],N*L)
等。
答案 1 :(得分:2)
只需使用基础数学。
q = floor(123456/100);
r = rem(123456,100);
Output = mat2cell(x, 50, [repmat(100,1,q),r])