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