Counting occurrences of a pointer

1 次查看(过去 30 天)
n=5;
h=zeros(n,1);
u=ceil(rand(n,1)*n); % random sample on (1,n) with replacement
h(u) = h(u) +1;
u = [3 4 1 1 5]]
h = [1 0 1 1 1]
note h(1) = 1 not 2 even though there are 2 occurrences of 1 in u
I know the following loop will count properly
for i=1:n
h(u(i)) = h(u(i)) +1;
end
How can I code this a a vector operation without a loop?

采纳的回答

Azzi Abdelmalek
Azzi Abdelmalek 2013-8-5
编辑:Azzi Abdelmalek 2013-8-5
u = [3 4 1 1 5]
accumarray(u',[1:numel(u)]',[],@(x) numel(x))
  1 个评论
Jan
Jan 2013-8-5
The additional square brackets are not needed and waste time only:
[1:numel(u)]' ==> faster: (1:numel(u))'

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Surface and Mesh Plots 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by