将矩阵转换为单元阵列的单元阵列

时间:2014-08-12 02:46:19

标签: matlab

我想将矩阵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])

但它并不是一个直观的解决方案。

那么有一个很好的解决方案吗?

2 个答案:

答案 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])