如何在Matlab中预先分配单元阵列以提高速度



有人能帮助我了解如何预分配我在"状态";(状态是Nx1单元,其中每个单元是1x1结构(以提高代码的速度?(tic-toc约57秒(

提前感谢!

tweetquery = 'hello';
s = search(c,tweetquery,'count',100);
statuses = s.Body.Data.statuses;
%
while isfield(s.Body.Data.search_metadata,'next_results') 
nextresults = string(s.Body.Data.search_metadata.next_results);   
max_id = extractBetween(nextresults,"max_id=","&");              
cmax_id = char(max_id);                                                                                
s = search(c,tweetquery,'count',100,'max_id',cmax_id);
statuses = [statuses;s.Body.Data.statuses];
end

通常,使用cell函数预分配单元数组:

statuses = cell(N,1);

然而,在这种情况下,您不知道需要多少元素。您可以分配一个非常大的单元数组,比您需要的大,然后在最后切掉未使用的部分,或者您必须在每次循环迭代中扩展数组。如果在循环中执行的计算足够大,那么重新分配的成本就不重要了。

为了在每次迭代中优化扩展矩阵,最好使用以下语法:

statuses{end+1} = new_element;

这假设new_element是单个元素,而不是需要附加的元素的单元数组。这样做更好的原因是它允许MATLAB优化数组的重新分配。请参阅其他问答;一个实验证明了这种差异。

最新更新