我有一个计算直方图的代码循环,使用Matlab语言编写。由于我是Matlab的新手,我不知道还有哪些更快的方法可以实现此功能。目前我正在编写:
有没有更快的方法来做这件事,最好不需要使用for循环?
for i=1:size(b)
a(b(i)) = a(b(i)) + 1;
end
有没有更快的方法来做这件事,最好不需要使用for循环?
for i=1:size(b)
a(b(i)) = a(b(i)) + 1;
end
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;
size
不适合您当前所做的操作,而应该使用length或numel。 - Gunther Struyf