简化代码以在Matlab中展平数组

时间:2019-01-05 16:54:17

标签: matlab matrix

假设我有一个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

1 个答案:

答案 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,:))';

我个人更喜欢第一个,因为它使我的代码看起来更好。