首页 > 解决方案 > 简化代码以在matlab中展平数组

问题描述

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

标签: matlabmatrix

解决方案


我只会给你3种方法来做到这一点。所有这些都有效。

第一个是我通常使用的一个是在我的计算机上拥有一个名为vec

function out = vec(in)
out = in(:);
end

然后你可以通过

patterns{i} = vec(seqs(i,1,:));

然后你可以调用这个函数,它允许更精简的代码。第二个是评论中提到的reshape

patterns{i}=reshape(seqs(i,1,:),[],1);

我通常不建议对这些类型的问题进行 reshape,因为如果你不小心,它往往会失败。最后是使用挤压和转置。

patterns{i} = squeeze(seqs(i,1,:))';

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


推荐阅读