I am trying to make a function for an histogram to explain the concept to students, is possible to vectorize this loop?
[x,y]=size(A);
freq=zeros(256,1);
for i=1:x
for j=1:y
value=A(i,j);
freq(value+1)=freq(value+1)+1;
end
end
thanks in advance.

 Réponse acceptée

Guillaume
Guillaume le 27 Nov 2017

0 votes

Very simply with:
freq = accumarray(A(:), 1, [256, 1]);

2 commentaires

Miguel Reina
Miguel Reina le 27 Nov 2017
This error is appearing "Error using accumarray First input SUBS must contain positive integer subscripts." the Matrix A contains uint8 values and the size is 594x671
Yes, somehow I missed the +1 in your code. The correct answer should be:
freq = accumarray(A(:) + 1, 1, [256, 1]);

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by