如何使用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