优化matlab for循环

ani*_*udh 6 matlab

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

for i=1:size(b)
    a(b(i)) = a(b(i)) + 1;
end
Run Code Online (Sandbox Code Playgroud)

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

pet*_*hor 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
Run Code Online (Sandbox Code Playgroud)

如果您多次使用某些索引,那么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
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用:

>> 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
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请在此处查看此答案.