将矩阵转换为单元数组的单元数组

5

我希望将一个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])

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

那么,有没有好的解决方案呢?


您的示例矩阵大小不一致。我看不出如何使用您的示例参数以那种方式实现输出。另外,“cell trunk”到底是什么意思? - rayryeng
2个回答

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;

yields:

a = 
[50x100 double]    [50x100 double]    [50x100 double]    [50x34 double]

请注意,我在重新塑形时没有检查确切的尺寸,因此您可能需要重新塑形为 ..., [], N * L)等。

1
为了完整起见,这是一个解决方案:a=[cellfun(@(n) reshape(n,N,L), num2cell(reshape(m(:,1:size(m,2)-mod(size(m,2),L)),N*L,[]),1),'un',0) ,{m(:,end-mod(size(m,2),L)+1:end)}]; - bla
+1 - 你用你的回答解决了一个相当难以理解的问题。非常棒! - rayryeng

2
只需要运用基础数学即可。
q = floor(123456/100);
r = rem(123456,100);
Output = mat2cell(x, 50, [repmat(100,1,q),r])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接