how to scan a matrix row by row and save index of elements

10 views (last 30 days)
A =
1 2 3 4
0.5 5 6 2
5 3 1 3
I have a matrix-like A, and my aim is to scan the matrix row by row and save the index of values that is greater than 2 (or any threshold). In fact, I want to have an array like this:
H = {[3,4];[2,3];[1,2,4]}
I tried to do it like below but I don't know how I can append an elemnt to the end of array H.
If you can suggest anything faster way, I would appreciate it.
for i = 1:width(A)
H{i} = [];
for j = 1:height(A)
if A(i,j) > 2
H{i} = % how to indicate the index of the matxis that is true for the if condition
end
end
end
  1 Comment
Matt J
Matt J on 2 Sep 2021
Edited: Matt J on 2 Sep 2021
I wonder why you wouldn't simply use a sparse binarymatrix:
H=sparse(A>2);

Sign in to comment.

Accepted Answer

Matt J
Matt J on 2 Sep 2021
Edited: Matt J on 2 Sep 2021
A = [1 2 3 4
0.5 5 6 2
5 3 1 3] ;
[I,J]=find(A>2);
H=accumarray(I,J,[],@(x){x.'});
H{:}
ans = 1×2
3 4
ans = 1×2
2 3
ans = 1×3
1 2 4
  2 Comments
ali eskandari
ali eskandari on 2 Sep 2021
Thank you @Matt J but this will return the values not the index of each.
Matt J
Matt J on 2 Sep 2021
Edited: Matt J on 2 Sep 2021
But I demonstrated it for you on your example!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!