假设我有一个1000x2x10x10矩阵,目前我通过以下代码将它们放入两个单元格数组中,
for i=1:1000
tmp = seqs(i,1,:);
patterns{i} = tmp(:);
tmp = seqs(i,2,:);
labels{i} = tmp(:);
end
patterns{i} = tmp(:)
和labels{i} = tmp(:)
的目的是使矩阵变平。我的问题是,是否可以简化像patterns{i}=seqs(i,1,:)(:)
这样的代码?我尝试了这个,但是Matlab不允许这样做,这就是为什么我目前必须使用一个临时变量tmp
。
答案 0 :(得分:2)
我将为您提供3种方法。所有的工作。
第一个是我通常使用的功能,即在我的计算机上拥有一个名为vec
的功能
function out = vec(in)
out = in(:);
end
然后您可以通过
使用它patterns{i} = vec(seqs(i,1,:));
然后您可以调用此函数,它允许使用更简化的代码。第二是评论中提到的重塑
patterns{i}=reshape(seqs(i,1,:),[],1);
我通常不建议针对这些类型的问题重塑形状,因为如果您不小心,它往往会失败。最后是使用挤压和转置。
patterns{i} = squeeze(seqs(i,1,:))';
我个人更喜欢第一个,因为它使我的代码看起来更好。