优化matlab for循环

时间:2012-09-28 17:35:59

标签: matlab

我有以下循环代码(计算直方图)。我在Matlab写作。由于我是Matlab的新手,我不知道有任何更快的方法可以做到这一点。我正在写作

for i=1:size(b)
    a(b(i)) = a(b(i)) + 1;
end

有没有更快的方法来执行此操作,最好是那些不需要for循环的方法?

2 个答案:

答案 0 :(得分:9)

您可以通过a(b) = a(b) + 1简单地对其进行矢量化。请检查以下内容:

>> a = [1 2 3 4];
>> b = [2 4]; %# indices to modify. Be sure that they are in bounds.
>> a(b) = a(b) + 1

a =

     1     3     3     5

如果您多次使用某些索引,那么accumarray将有以下帮助:

>> a = [1 2 3 4];
>> b = [2 4 2];
>> a = accumarray([1:numel(a) b].',[a ones(size(b))])'

a =

     1     4     3     5

或者,您可以使用:

>> a = [1 2 3 4];
>> b = [2 4 2];
>> b = accumarray(b.',ones(size(b)));
>> a(nzIndex) = a(nzIndex) + b(nzIndex)'

a =

     1     4     3     5

有关详细信息,请参阅此处this nice answer

答案 1 :(得分:1)

如果ab都是向量,那么这应该可行。

a = 1:100;
b = 100:-1:1;

a(b) = a(b) + 1;