6

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

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

有没有更快的方法来做到这一点,最好是那些不需要 for 循环的方法?

4

2 回答 2

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

有关更多详细信息,请在此处查看这个不错的答案。

于 2012-09-28T17:40:29.247 回答
1

如果两者a都是b向量,这应该有效。

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

a(b) = a(b) + 1;
于 2012-09-28T17:43:45.103 回答