can this loop be vectorized ?

1 回表示 (過去 30 日間)
Miguel Reina
Miguel Reina 2017 年 11 月 27 日
コメント済み: Guillaume 2017 年 11 月 27 日
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.

採用された回答

Guillaume
Guillaume 2017 年 11 月 27 日
Very simply with:
freq = accumarray(A(:), 1, [256, 1]);
  2 件のコメント
Miguel Reina
Miguel Reina 2017 年 11 月 27 日
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 2017 年 11 月 27 日
Yes, somehow I missed the +1 in your code. The correct answer should be:
freq = accumarray(A(:) + 1, 1, [256, 1]);

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by