0

我是 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 中完成。

4

3 回答 3

4

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

使用它,你应该完成。

for jj=  nFrames:-1:init_frame

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

于 2013-02-26T16:31:18.630 回答
3

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

这是一个例子:

N = 10000;
x = zeros(1,N);
for i = 1:N
    x(i) = someFunction(i);
end

丹尼斯关于向后循环的回答是一个方便的技巧,可以在循环之前预先分配而不需要额外的代码行。

于 2013-02-26T16:37:08.477 回答
1

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

于 2013-02-26T16:42:38.310 回答