重塑(交替)数千个数据的有效方法

Efficient way to reshape (alternately) thousands of data

我有一个非常大的数据集,有数千行和数百列。我尝试交替重塑每第 n 行和所有第 n 行列数据的数据。我试过这样:

in=rand(71760,320);
m=240; n=320;
[R,C]=size(in); 
out=[];
R_out=R/m; 

for k=1:m %from row 1 to mth row
    for i=1:C %reshape every column of mth row
        out=[out;reshape(in(k:m:end,i),R_out,1)'];
    end
end

如果你试一下代码,花的时间很长,而且一点效率都没有,你甚至都懒得让它完成。如何提高性能?或者有更好的方法吗?

更新

这个问题被扩展到另一个线程以提高@Teddy提供的重塑答案的性能

花费这么长时间的原因是 out 矩阵应该是 preallocated.

例如,这在我的笔记本电脑上大约 1 秒内完成:

in=rand(71760,320);
m=240; n=320;
[R,C]=size(in); 
R_out=R/m; 

out=zeros(m*C,R_out);
for k=1:m %from row 1 to nth row
    for i=1:C %reshape every column of nth row
        out(i+C*(k-1),:) = in(k:m:end,i)';
    end
end

替代方法

最佳做法是使用 arrayfun 的矢量化方法,这可以像这样在一行中完成:

out=cell2mat(arrayfun(@(k) in(k:m:end,:)', 1:m,'uniformoutput',0)');

这也运行得更快。