【发布时间】:2017-08-27 03:25:27
【问题描述】:
这是上一个问题here 的扩展问题。我正在根据下面的代码重塑数据。但是,当数据量增加时,in=rand(291081,1920);,上一个问题中的答案(预分配)无法再处理了,MATLAB 甚至冻结了整个笔记本电脑。因此,正如 Teddy 在上一个问题中所建议的那样,我要提出一个新问题来提高循环的性能。
可以找到一些非常相似但不相似的问题here。从那里,给出的答案建议将循环修改为按列。但是,由于我的循环需要同时访问行和列,所以答案似乎不适用于我的情况。
是否仍可以修改此循环以提高其性能?或者可以在不冻结整个笔记本电脑的情况下完成这个循环吗?如果可能,不要涉及 GPU。
in=rand(291081,1920);
m=581;
[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
P/S:在上一个问题中,当数据量变大时,循环和arrayfun似乎没有太大的性能差异。
提前致谢!
【问题讨论】:
标签: matlab performance for-loop optimization