在Matlab中预分配数组以提高性能

时间:2013-02-26 16:29:21

标签: arrays performance matlab

我是Matlab的新手。 Mlint告诉我需要预先分配数组以提高性能。任何人都可以告诉我如何在以下代码片段中预先分配数组大小:

for jj= init_frame: nFrames

   im1 = double(mov(jj).cdata);
   color_hist_array(jj,:) = color_histogram(im1, bins);
   [spatio_gram_array(jj,:),mu(jj,:,:),sigma(jj,:,:,:)] = spatiogram(im1, bins);

预分配需要在color_hist_array,spatio_gram_array,mu和sigma中完成。

3 个答案:

答案 0 :(得分:4)

预分配实际上很容易在matlab中完成,在您的情况下只需更改一行代码即可。

使用此功能,您应该完成。

for jj=  nFrames:-1:init_frame

因为你向后循环,所有变量都以最大大小开始,并且一次分配空间。

答案 1 :(得分:3)

预分配意味着您首先要创建所需大小的变量,然后填写值。这比在循环的每次迭代中使变量大小增长要快得多,因为增长需要分配新大小的新内存,然后将旧数据复制到新内存中。

以下是一个例子:

N = 10000;
x = zeros(1,N);
for i = 1:N
    x(i) = someFunction(i);
end
关于循环向后循环的

Dennis's answer是一个方便的技巧,可以在循环之前预先分配没有额外的代码行。

答案 2 :(得分:1)

阅读thisthis链接。简单来说,预分配只是告诉MATLAB,矩阵的大小(在开始使用Matrix之前)。这样MATLAB就可以分配足够的内存。但是对此有更多的分析,你会在上面的链接中找到。