在matlab中简化阵列展平的代码

在matlab中简化阵列展平的代码,matlab,matrix,Matlab,Matrix,假设我有一个1000x2x10矩阵,目前我通过以下代码将它们放入两个单元阵列中 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(:)的目的是将矩阵展平。我的问题是,是否可以简化代码,比如模式{i}=seqs(i,1,:)(:)?我试过这个,但是M

假设我有一个1000x2x10矩阵,目前我通过以下代码将它们放入两个单元阵列中

  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(:)
的目的是将矩阵展平。我的问题是,是否可以简化代码,比如
模式{i}=seqs(i,1,:)(:)
?我试过这个,但是Matlab不允许这样做,这就是为什么我现在必须使用一个临时变量
tmp

我将给出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,:))';

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

您可以使用
模式{I}=reformate(seqs(I,1,:),[],1)
将形状改为列,如
(:)
所做的。此外,您的代码可能可以使用
mat2cell
进行简化,但我不确定该代码段在做什么。可能会发布一个包含所需输入和输出的最小示例。我的计算机上通常有一个单独的功能,名为
vec
,它执行此操作。要回答您的问题,如果不通过一些函数(如重塑或诸如此类的函数)在Matlab中执行另一个内存调用,或者您在(:)中执行
vec=@(in))在需要
vec
之前在程序中的某个位置。那么你就不需要单独的文件了。我通常不建议对这些类型的问题进行重塑,因为如果你不小心的话,它往往会失败。你的意思是什么?什么时候重塑(…,[],1)
失败了?另外,请注意
转置和共轭