Effacer les filtres
Effacer les filtres

can this loop be vectorized ?

3 vues (au cours des 30 derniers jours)
Miguel Reina
Miguel Reina le 27 Nov 2017
Commenté : Guillaume le 27 Nov 2017
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
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
Guillaume
Guillaume le 27 Nov 2017
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 Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by