我有一个代码的以下循环(计算直方图)。我正在用 Matlab 写作。由于我是 Matlab 的新手,所以我不知道有什么更快的方法可以做到这一点。我目前正在写
for i=1:size(b)
a(b(i)) = a(b(i)) + 1;
end
有没有更快的方法来做到这一点,最好是那些不需要 for 循环的方法?
我有一个代码的以下循环(计算直方图)。我正在用 Matlab 写作。由于我是 Matlab 的新手,所以我不知道有什么更快的方法可以做到这一点。我目前正在写
for i=1:size(b)
a(b(i)) = a(b(i)) + 1;
end
有没有更快的方法来做到这一点,最好是那些不需要 for 循环的方法?
您可以简单地将其矢量化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
有关更多详细信息,请在此处查看这个不错的答案。
如果两者a
都是b
向量,这应该有效。
a = 1:100;
b = 100:-1:1;
a(b) = a(b) + 1;