Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 重塑海量数据时提高循环性能_Matlab_Performance_For Loop_Optimization - Fatal编程技术网

Matlab 重塑海量数据时提高循环性能

Matlab 重塑海量数据时提高循环性能,matlab,performance,for-loop,optimization,Matlab,Performance,For Loop,Optimization,这是上一个问题的延伸问题。我正在根据下面的代码重塑数据。然而,当数据大小增加时,in=rand(2910811920),上一个问题的答案(预分配)无法处理,MATLAB甚至冻结了整个笔记本电脑。因此,正如Teddy在最后一个问题中所建议的那样,我将打开一个新问题来提高循环的性能 可以找到一些非常相似但不相似的问题。因此,给出的答案建议将循环修改为列式。然而,由于我的循环需要同时访问行和列,所以答案似乎不适用于我的情况 是否仍可以修改此循环以提高其性能?或者这个循环可以在不冻结整个笔记本电脑的情况

这是上一个问题的延伸问题。我正在根据下面的代码重塑数据。然而,当数据大小增加时,
in=rand(2910811920),上一个问题的答案(预分配)无法处理,MATLAB甚至冻结了整个笔记本电脑。因此,正如Teddy在最后一个问题中所建议的那样,我将打开一个新问题来提高循环的性能

可以找到一些非常相似但不相似的问题。因此,给出的答案建议将循环修改为列式。然而,由于我的循环需要同时访问行和列,所以答案似乎不适用于我的情况

是否仍可以修改此循环以提高其性能?或者这个循环可以在不冻结整个笔记本电脑的情况下完成吗?如果可能,不涉及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
似乎没有太大的性能差异

提前谢谢

您可以创建矩阵,使其只包含
R\u out

% Input
in=rand(291081,1920);
m=581;
[R,C]=size(in); 
R_out=R/m; 

% Reshape
out = reshape(in.', [], R_out);
此操作所需的大部分时间是由矩阵中
的换位引起的。因此,为了进一步加速upp,您可以尝试收集/馈送数据,使其已被转置,然后只需进行重塑。

首先,感谢您提供的答案,这启发了这个答案。似乎使用重塑是迄今为止处理海量数据最有效的方法。因此,为了避免使用建议的转置,使用了
permute
reformate
,如下所示

out=重塑(排列(重塑(in,m,R_-out,[]),[1,3,2]),[],R_-out)

这是迄今为止最快的重塑方式

如果没有更好的答案,我会把这个标记为答案