我有一个非常大的数据集,数千行和数百列。我尝试交替重塑每第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
如果您尝试使用该代码,则需要花费很长时间而且效率不高,您甚至不愿意让它完成。如何提高性能?或者有更好的方法来做到这一点?
更新
此问题已扩展至另一个帖子here,以提高@Teddy提供的重塑答案的效果
答案 0 :(得分:3)
需要这么长时间的原因是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)');
这也运行得更快。