如何使用Matlab中的cell2mat循环将单元格转换为矩阵?

如何使用Matlab中的cell2mat循环将单元格转换为矩阵?,matlab,matrix,cell-array,Matlab,Matrix,Cell Array,我有一个单元格a(361,1),它包含361x3d矩阵。矩阵的第一维和第二维相同,但第三维的长度不同 所以细胞A看起来像: A={(464x201x31);(464x201x28);(464x201x31);(464x201x30)....} 我想通过循环从这个单元格中得到矩阵。我尝试了以下解决方案: for i=1:361; M(i)=cell2mat(A(i)); end 但我得到了以下错误: 下标赋值维度不匹配 1。如果您想独立于单元格数组访问每个3D数组,则始终可以使用A{i}获取

我有一个单元格
a(361,1)
,它包含
361x3d
矩阵。矩阵的第一维和第二维相同,但第三维的长度不同

所以细胞A看起来像:

A={(464x201x31);(464x201x28);(464x201x31);(464x201x30)....}
我想通过循环从这个单元格中得到矩阵。我尝试了以下解决方案:

for i=1:361;
M(i)=cell2mat(A(i));
end 
但我得到了以下错误:

下标赋值维度不匹配


1。如果您想独立于单元格数组访问每个3D数组,则始终可以使用
A{i}
获取每个3D矩阵

例如:

%// Here i have taken example cell array of 1D matrix 
%// but it holds good for any dimensions

A = {[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6]};

>> A{1}

ans =

 1     2     3
2.相反,如果您想将所有这些三维矩阵连接成单个三维矩阵,这里有一种方法

out = cell2mat(permute(A,[1 3 2]));  %// assuming A is 1x361 from your example

3.如果你想NaN pad他们获得4D矩阵

maxSize = max(cellfun(@(x) size(x,3),A));   
f = @(x) cat(3, x, nan(size(x,1),size(x,2),maxSize-size(x,3)));  
out = cellfun(f,A,'UniformOutput',false); 
out = cat(4,out{:}); 
样本运行:

>> A

A = 

[3x4x2 double]    [3x4x3 double]    [3x4x4 double]

>> size(out)

ans =

 3     4     4     3 
%// note the first 3 size. It took the max size of the 3D matrices. i.e 3x4x4
%// Size of 4th dimension is equal to the no. of 3D matrices   

您可以通过
out(:,:,:,i)

访问每个三维矩阵。您希望最终矩阵的尺寸是多少?是否将所有三维矩阵连接在一起?你想要什么还不清楚。如果你想得到一个4维矩阵作为输出,每个3D矩阵的大小必须相同。。但你的情况不同。这就是你出错的原因。相反,你可以像rayryeng建议的那样,将它们
cat
转换为单个3D矩阵。如果你想编辑,请查看编辑。谢谢你的回答,但我想得到361个3D矩阵。你能推荐一个合适的循环吗?@Beata,那将是一个4D矩阵。。但是你的第三维度并不一致。。31、28、31、30等。。相反,你可以对它们进行NaN填充,使其一致并获得它们。。你确定你想这么做吗?@Beata的人会一直误解你想要什么,如果你不澄清你原来的帖子。我们至少问了三个问题,你还没有回答。如果我们不能理解你想要什么,你不能指望我们给你正确的答案。@rayryeng,谢谢。有时通过回答我学到了一些东西:)对不起,我耽搁了!我接受了三番撒莱的建议。我用nanpad制作了4D矩阵。再次感谢您的帮助!
>> A

A = 

[3x4x2 double]    [3x4x3 double]    [3x4x4 double]

>> size(out)

ans =

 3     4     4     3 
%// note the first 3 size. It took the max size of the 3D matrices. i.e 3x4x4
%// Size of 4th dimension is equal to the no. of 3D matrices